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

标签 java spring spring-boot spring-hateoas

我正在通过书面教程学习如何使用 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/

相关文章:

java - Android studio 3.2.1 不构建新项目和 color.xml 文件

tomcat - 如何防止 spring boot 同时登录到指定文件和 catalina.out

java - 没有类型 {http ://schemas. xmlsoap.org/ws/2005/07/securitypolicy} 的断言构建器

java - 如何在 Java 中传递和调用方法引用

java - 如何在 spring-mvc 中为响应启用多个内容类型?

java - 提交表单时出错-客户端发送的请求在语法上不正确-Spring DAO

hibernate - @autowired 注释问题,不在类中注入(inject) bean,使用 Spring3.0, hibernate

java - Spring RestTemplate.getForObject() 的 JSON 转换错误

java - 使用 AJAX 和 Spring Boot 下载文件

java - 网 bean 8.2 : Is restarting a project required to see changes?