我正在通过书面教程学习如何使用 Spring Boot 构建 REST API,并在某些时候使用 HATEOAS。看来教程使用了现在已经过时的版本(0.x),因为没有找到类 Resource、Resources、ControllerLinkBuilder 等,所以经过一番挖掘,我发现 1.x 修改了一些类的结构和命名。我只是用其更新版本(带有 EntityModel 的资源等)替换了所有提到的类/方法,并且没有遇到太多麻烦,直到我陷入需要资源的“ self ”链接来生成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/