ResourceSupport.getId() 在 Spring HATEOAS 1.x
ResourceSupport.getId() on Spring HATEOAS 1.x
我正在通过书面教程学习如何使用 Spring Boot 构建 REST API,有时会使用 HATEOAS。教程似乎使用了现在已过时的版本 (0.x),因为未找到 classes Resource、Resources、ControllerLinkBuilder 等,所以经过一番挖掘后我发现 1.x 有修改了一些 classes 的结构和命名。我只是用它的更新版本(带有 EntityModel 的资源等)交换了对 class/method 的每一次提及,并没有 运行 遇到太多麻烦,直到我卡在资源 [=24 的部分=] link 需要为 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 中的 EntityModel 1.x?
这是class "assembler"变量的一个实例:
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()
returns 和 Optional<Link>
我只需要添加 orElse()
大小写,所以它是 "unwrapped".
我正在通过书面教程学习如何使用 Spring Boot 构建 REST API,有时会使用 HATEOAS。教程似乎使用了现在已过时的版本 (0.x),因为未找到 classes Resource、Resources、ControllerLinkBuilder 等,所以经过一番挖掘后我发现 1.x 有修改了一些 classes 的结构和命名。我只是用它的更新版本(带有 EntityModel 的资源等)交换了对 class/method 的每一次提及,并没有 运行 遇到太多麻烦,直到我卡在资源 [=24 的部分=] link 需要为 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 中的 EntityModel 1.x?
这是class "assembler"变量的一个实例:
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()
returns 和 Optional<Link>
我只需要添加 orElse()
大小写,所以它是 "unwrapped".