如何构建REST风格的WEB地图服务

如何构建REST风格的WEB地图服务,第1张

让我们构建一个简单的EmployeeManager Web服务,我们将使用它来演示与MongoDB连接的HATEOAS。为了引导我们的应用程序,我们将使用Spring Initializr。我们将使用Spring HATEOAS和Spring Data MongoDB作为依赖项。你应该看到类似下图2所示的内容。  图2 :引导应用程序配置完成后,下载zip并将其作为Maven项目导入你喜欢的IDE中。 首先,让我们配置applicationproperties。

springdatamongodbhost= //Mongo server host

springdatamongodbport= //Mongo server port
springdatamongodbusername= //Login user
springdatamongodbpassword= //Password
springdatamongodbdatabase= //Database name

一般来说,如果所有内容都是全新安装的,并且你没有更改或修改任何Mongo属性,则只需提供一个数据库名称(已经通过GUI创建了一个数据库名称)。

springdatamongodbdatabase = EmployeeManager

另外,为了启动Mongo实例,作者创建了一个bat,它指向安装文件夹和数据文件夹。它是这样的:"C:\Program Files\MongoDB\Server\36\bin\mongod" --dbpath D:\Inther\EmployeeManager\warehouse-data\db 
现在,我们来快速创建模型。这里有两个模型,员工模型和部门模型。检查它们,确保有没有参数、getter、setter、equals方法和hashCode生成的构造函数。(不用担心,所有代码都在GitHub上,你可以稍后查看它:>

public class Employee {
private String employeeId;
private String firstName;
private String lastName;
private int age;
}
public class Department {
private String department;
private String name;
private String description;
private List<Employee> employees;
}

现在我们已经完成了模型的制作,让我们来创建存储库,以便来测试持久性。存储库如下所示:

public interface EmployeeRepository
extends MongoRepository<Employee, String> {
}
public interface DepartmentRepository
extends MongoRepository<Department,String>{
}

如上所示,这里没有方法,因为大家都知道Spring Data中的中心接口被命名为Repository,在其之上是CrudRepository,它提供了处理模型的基本 *** 作。在CrudRepository之上,我们有PagingAndSortingRepository,它为我们提供了一些扩展功能,来简化分页和排序访问。在我们的案例中,最重要的是MongoRepository,它用于严格处理我们的Mongo实例。因此,对于我们的案例来说,除了那些现成的方法外,我们不需要任何其他方法,但是仅出于学习目的,作者在这里要提到的是你可以添加其他查询方法的两种方法:

“惰性”(查询创建):此策略将尝试通过分析查询方法的名称并推断关键字(例如findByLastnameAndFirstname)来构建查询。编写查询:这里没有什么特别的。例如,只用@Query注释你的方法,然后自己编写查询。你也可以在MongoDB中编写查询。下面是基于JSON的查询方法的示例:

@Query("{ 'firstname' : 0 }")
List<Employee> findByTheEmployeesFirstname(String firstname);

至此,我们已经可以测试我们持久性如何工作。我们只需要对模型进行一些调整即可。通过调整,作者的意思是我们需要注释一些东西。Spring Data MongoDB使用MappingMongoConverter将对象映射到文档,下面是我们将要使用的一些注释:@Id :字段级别注释,指出你的哪个字段是身份标识。@Document :类级别的注释,用于表示该类将被持久化到数据库中。@DBRef :描述参考性的字段级别注释。注释完成后,我们可以使用CommandLineRunner获取数据库中的一些数据,CommandLineRunner是一个接口,用于在应用程序完全启动时(即在run()方法之前)运行代码段。我们已经创建了一些模型,并对它们进行了持久化。现在,我们需要一种与他们交互的方式。如上所说,所有代码都可以在GitHub上找到,因此作者在这里将仅向我们展示一个域服务(接口和实现)。接口的实现如下:

@Service public class EmployeeServiceImpl implements EmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
@Override
public Employee saveEmployee(Employee e) {
return employeeRepositorysave(e);
}
@Override
public Employee findByEmployeeId(String employeeId) {
return employeeRepositoryfindOne(employeeId);
}
@Override
public void deleteByEmployeeId(String employeeId) {
employeeRepositorydelete(employeeId);
}
@Override
public void updateEmployee(Employee e) {
employeeRepositorysave(e);
}
@Override
public boolean employeeExists(Employee e) {
return employeeRepositoryexists(Exampleof(e));
}
@Override
public List<Employee> findAll() {
return employeeRepositoryfindAll();
}
@Override
public void deleteAll() {
employeeRepositorydeleteAll();
}
}

这里没有什么特别的要注意的,下面我们将继续讨论最后一个难题——控制器!因此,对于上面实现的所有方法,我们将自己定位在Richardson成熟度模型的第二级,因为我们使用了所示添加新资源。        图3 :检索JSON中的部门列表       图4:JSON中添加新员工


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13451146.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-09
下一篇 2023-08-09

发表评论

登录后才能评论

评论列表(0条)

保存