将位置标头添加到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并将其添加到响应中更好的方法。
任何帮助/线索都非常感谢
我的 Spring boot 1.4 应用程序具有此 POST 方法来创建资源。作为要求,它应该吐出一个位置标头,指定新创建的资源的 URL(https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html)。我只是想知道是否有任何比手动构建URL并将其添加到响应中更好的方法。
任何帮助/线索都非常感谢
此确切方案在使用 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()
@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()
}