帽子
HATEOAS是Hypermedia(应用程序状态引擎)的首字母缩写。超级媒体一词是指包含指向其他形式的媒体(如图像, 电影和文本)的链接的内容。它是REST应用程序的一个组件, 可将其与其他网络体系结构区分开。客户端使用HATEOAS与网络应用程序进行交互, 该网络应用程序的应用程序服务器通过Hypermedia动态提供信息。
春季HATEOAS
Spring-HATEOAS是API的库。在使用Spring MVC时, 我们可以使用这些API创建遵循HATEOAS原理的REST表示形式。
在Spring HATEOAS项目中, 我们不需要Servlet Context并将路径变量连接到基本URI。取而代之的是, Spring HATEOAS提供了三种用于创建URI的抽象:ContrrollerLinkBuilder, 链接和资源支持。我们可以使用这些抽象来创建与资源表示相关联的元数据。
特征
- 它支持HAL之类的超媒体格式。
- 它提供了链接构建器API来创建指向MVC控制器方法的链接。
- 链接的模型类, 资源表示模型。
- 配置HAL支持
- 注册对实体链接的支持
- 连接消息转换器支持
让我们在项目中实现HATEOAS。
步骤1:打开pom.xml并添加spring-boot-starter-hateoas依赖项。
<
dependency>
d<
groupId>
org.springframework.boot<
/groupId>
<
artifactId>
spring-boot-starter-hateoas<
/artifactId>
<
/dependency>
第2步:打开UserResource.java并复制retrieveUser()方法。
步骤3:粘贴方法并进行以下更改:
- 创建Resource类的构造函数。
Resource<
User>
resource = new Resource<
User>
(User)
请记住, 导入org.springframework.hateoas包的Res??ource类。
- 通过使用ControllerLinkBuilder类添加一个链接以检索所有用户。它使我们能够从方法创建链接。
- 导入ControllerLinkBuilder。
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.
- 使用ControllerLinkBuilder类的方法linkTo()。它创建了一个新的ControllerLinkBuilder, 其基础是注释到给定控制器类的映射。
ControllerLinkBuilder linkTo=linkTo(methodOn(this.getClass().retrieveAllUsers());
methodOn()是DummyInvocationUtils.methodOn(class, Object)的包装, 以防你使用ControllerLinkBuilder的静态导入工作。
- 将此链接添加到具有我们要在HATEOAS中使用的名称的资源。
resource.add(linkTo.withRel("all-users"));
withRel(String rel)是使用给定的rel创建由当前构建器实例构建的链接的方法。参数rel不能为null。
- 返回资源而不是用户。
- 将方法的返回类型更改为Resource。
UserResource.java
package com.srcmini.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;
@RestControllerpublic class UserResource {@Autowiredprivate UserDaoService service;
@GetMapping("/users")public List<
User>
retriveAllUsers(){return service.findAll();
}@GetMapping("/users/{id}")public Resource<
User>
retriveUser(@PathVariable int id){User user= service.findOne(id);
if(user==null)//runtime exceptionthrow new UserNotFoundException("id: "+ id);
//"all-users", SERVER_PATH + "/users"//retrieveAllUsersResource<
User>
resource=new Resource<
User>
(user);
//constructor of Resource class//add link to retrieve all the usersControllerLinkBuilder 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 exceptionthrow new UserNotFoundException("id: "+ id);
}//method that posts a new user detail and returns the status of the user resource@PostMapping("/users")public ResponseEntity<
Object>
createUser(@Valid @RequestBody User user) {User sevedUser=service.save(user);
URI location=ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(sevedUser.getId()).toUri();
return ResponseEntity.created(location).build();
}}
步骤4:打开REST客户端Postman并发送GET请求。
文章图片
【为RESTful服务实现HATEOAS】在这里, 我们可以看到它返回了用户以及用于访问所有用户的链接。现在, 单击链接, 然后再次发送GET请求。它返回所有用户的列表, 如下图所示。
文章图片
推荐阅读
- 将RESTful服务连接到JPA
- java|web3js基本使用
- WinXP系统IE提示“确实允许此页面访问剪贴板吗”如何处理?
- WinXP电脑IE提示“此选项卡已经恢复”怎样办?
- WinXP系统让电脑定时运行程序的办法
- WinXP桌面右下角提示请运行Chkdsk工具的办法
- WinXP运用BadCopy光盘数据恢复的办法
- WinXP系统注册Windows Live ID的办法
- WinXP页面上有出错怎样处理?