我正在通过书面教程来学习如何使用Spring Boot来构建REST API,并且有时会使用HATEOAS。由于未找到类Resource,Resources,ControllerLinkBuilder等,因此该教程似乎使用了一个过时的版本(0.x),因此在进行一些挖掘之后,我发现1.x修改了某些类的结构和命名。我只是用更新的版本(涉及带EntityModel的资源,等等)交换了对类/方法的所有提及,并且在遇到需要使用资源的“自我”链接来生成资源的部分时,并没有遇到太大的麻烦。 POST命令的HTTP响应:
@PostMapping("/employees")
ResponseEntity<?> newEmployee(@RequestBody Employee newEmployee) throws URISyntaxException {
Resource<Employee> resource = assembler.toResource(repository.save(newEmployee));
return ResponseEntity
.created(new URI(resource.getId().expand().getHref()))
.body(resource);
}
是否有等同于
resource.getId()
对于HATEOAS 1.x中的EntityModel?
该类是“汇编程序”变量的实例:
package payroll;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.server.RepresentationModelAssembler;
import org.springframework.stereotype.Component;
@Component
class EmployeeResourceAssembler implements RepresentationModelAssembler<Employee, EntityModel<Employee>> {
@Override
public EntityModel<Employee> toModel(Employee employee) {
return new EntityModel<>(employee,
linkTo(methodOn(EmployeeController.class).one(employee.getId())).withSelfRel(),
linkTo(methodOn(EmployeeController.class).all()).withRel("employees"));
}
}
最佳答案
找到它,相当于在HATEOAS 1.x中执行此操作:
return ResponseEntity
.created(new URI(resource.getLink("self").orElse(new Link("self")).getHref()))
.body(resource);
因为
getLink()
返回一个Optional<Link>
,所以我只需要添加orElse()
大小写,以便“解开”。关于java - Spring HATEOAS 1.x上的ResourceSupport.getId(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60128272/