My Spring boot 1.4应用程序使用此POST方法创建资源。作为要求,它应该吐出一个位置标头,指定新创建的资源(https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html)的URL。我只是想知道是否有任何好办法,而不是手动构建URL并将其添加到响应中。
非常感谢任何帮助/线索
答案 0 :(得分:3)
Building REST Services with Spring Guide中演示了这种确切的情况。
一旦您保留了新实体,就可以在控制器中使用以下内容:
URI location = ServletUriComponentsBuilder
.fromCurrentRequest()
.path("/{id}")
.buildAndExpand(newEntity.getId())
.toUri();
然后您可以使用ResponseEntity将其添加到您的回复中,如下所示:
ResponseEntity.created(location).build()
或
ResponseEntity.status(CREATED).header(HttpHeaders.LOCATION, location).build()
后者需要一个字符串,因此您可以在uri构建器上使用toUriString()
而不是toUri()
。
答案 1 :(得分:0)
另一种方法是使用> Using external babel configuration
> Location: "C:\Users\name\Documents\GitHub\xxx\.babelrc"
Compiled successfully.
。您可以将其直接注入控制器方法中:
UriComponentsBuilder
请注意,以下内容不会计算当前请求路径。您将需要手动添加它(否则我可能会丢失一些东西)。
例如:
@PostMapping(consumes = { MediaType.APPLICATION_JSON_UTF8_VALUE })
public ResponseEntity<Void> addCustomer(
UriComponentsBuilder uriComponentsBuilder,
@RequestBody CustomerRequest customerRequest ){
final long customerId = customerService.addCustomer(customerRequest)
UriComponents uriComponents =
uriComponentsBuilder.path("/{id}").buildAndExpand(customerId);
return ResponseEntity.created(uriComponents.toUri()).build();
}