Spring HATEOAS 1.x上的ResourceSupport.getId()

问题描述 投票:0回答:1

我正在通过书面教程来学习如何使用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"));
    }
}
java spring spring-boot spring-hateoas
1个回答
0
投票

[发现它,相当于在HATEOAS 1.x中执行此操作:

return ResponseEntity
                .created(new URI(resource.getLink("self").orElse(new Link("self")).getHref()))
                .body(resource);

因为getLink()返回了Optional<Link>,所以我只需要添加orElse()大小写以便“展开”即可。

© www.soinside.com 2019 - 2024. All rights reserved.