将位置标头添加到Spring MVC的POST响应中?

2022-09-03 17:01:49

我的 Spring boot 1.4 应用程序具有此 POST 方法来创建资源。作为要求,它应该吐出一个位置标头,指定新创建的资源的 URL(https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html)。我只是想知道是否有任何比手动构建URL并将其添加到响应中更好的方法。

任何帮助/线索都非常感谢


答案 1

此确切方案在使用 Spring 构建 REST 服务指南中进行了演示。

持久化新实体后,您可以在控制器中使用以下内容:

URI location = ServletUriComponentsBuilder
                    .fromCurrentRequest()
                    .path("/{id}")
                    .buildAndExpand(newEntity.getId())
                    .toUri();

然后,您可以使用响应实体将其添加到响应中,如下所示:

ResponseEntity.created(location).build()

ResponseEntity.status(CREATED).header(HttpHeaders.LOCATION, location).build()

后者需要一个字符串,以便您可以在uri生成器上使用,而不是。toUriString()toUri()


答案 2
 @Autowired 
 private UserService service;

 @PostMapping("/users")
 public ResponseEntity<Object> createUser(@RequestBody User user)
  {
    User myUser = service.save(user);
    URI location = ServletUriComponentsBuilder
                .fromCurrentRequest()
                .path("/{id}")
                .buildAndExpand(myUser.getId())
                .toUri();

    ResponseEntity.created(location).build()
  }