📅  最后修改于: 2021-01-12 00:51:09             🧑  作者: Mango
HATEOAS首字母缩略词,表示“超媒体”是应用程序状态的引擎。术语“超媒体”是指包含指向其他形式的媒体(如图像,电影和文本)的链接的内容。它是REST应用程序的一个组件,可将其与其他网络体系结构区分开。客户端使用HATEOAS与网络应用程序进行交互,该网络应用程序的应用程序服务器通过Hypermedia动态提供信息。
Spring-HATEOAS是API的库。在使用Spring MVC时,我们可以使用这些API创建遵循HATEOAS原理的REST表示。
在Spring HATEOAS项目中,我们不需要Servlet Context并将路径变量连接到基本URI。取而代之的是,Spring HATEOAS提供了三种用于创建URI的抽象: ContrrollerLinkBuilder,Link和Resource Support 。我们可以使用这些抽象来创建与资源表示关联的元数据。
特征
Spring Boot执行以下任务:
假设我们已经为localhost:8080 / users / 1请求了GET请求,它返回了用户ID 1的详细信息。与此同时,它还返回了一个名为link的字段,其中包含所有链接( localhost:8080 / users )用户,以便消费者可以检索所有用户。这个概念称为HATEOAS 。
让我们在项目中实现HATEOAS。
步骤1:打开pom.xml并添加spring-boot-starter-hateoas依赖项。
d
org.springframework.boot
spring-boot-starter-hateoas
第2步:打开UserResource.java并复制retrieveUser()方法。
步骤3:粘贴方法并进行以下更改:
Resource resource = new Resource(User)
请记住,导入org.springframework.hateoas包的Resource类。
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.
ControllerLinkBuilder linkTo=linkTo(methodOn(this.getClass().retrieveAllUsers());
methodOn()是DummyInvocationUtils.methodOn(class,Object)的包装,以防您使用ControllerLinkBuilder的静态导入工作。
resource.add(linkTo.withRel("all-users"));
withRel(String rel)是使用给定的rel创建由当前构建器实例构建的链接的方法。参数rel不能为null。
进行上述更改后,UserResource.java文件如下所示:
UserResource.java
package com.javatpoint.server.main.user;
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.*;
import java.net.URI;
import java.util.List;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.hateoas.Resource;
import org.springframework.hateoas.mvc.ControllerLinkBuilder;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
@RestController
public class UserResource
{
@Autowired
private UserDaoService service;
@GetMapping("/users")
public List retriveAllUsers()
{
return service.findAll();
}
@GetMapping("/users/{id}")
public Resource retriveUser(@PathVariable int id)
{
User user= service.findOne(id);
if(user==null)
//runtime exception
throw new UserNotFoundException("id: "+ id);
//"all-users", SERVER_PATH + "/users"
//retrieveAllUsers
Resource resource=new Resource(user); //constructor of Resource class
//add link to retrieve all the users
ControllerLinkBuilder linkTo=linkTo(methodOn(this.getClass()).retriveAllUsers());
resource.add(linkTo.withRel("all-users"));
return resource;
}
//method that delete a user resource
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable int id)
{
User user= service.deleteById(id);
if(user==null)
//runtime exception
throw new UserNotFoundException("id: "+ id);
}
//method that posts a new user detail and returns the status of the user resource
@PostMapping("/users")
public ResponseEntity
步骤4:打开REST客户端Postman并发送GET请求。
在这里,我们可以看到它返回用户以及访问所有用户的链接。现在,单击链接,然后再次发送GET请求。它返回所有用户的列表,如下图所示。