У меня есть реактивный REST-контроллер (с Spring WebFlux), и при выполнении запросов POST я хочу установить абсолютную ссылку на только что созданный ресурс в обязательный Location
заголовок. Пока я могу создавать только относительные ссылки. Добавление org.springframework.http.server.reactive.ServerHttpRequest
или org.springframework.web.server.ServerWebExchange
в качестве дополнительных параметров метода в любом порядке для получения информации о хосте и т. Д. c. в результате HTTP 415 ответов без достижения метода контроллера.
@RequestMapping("/v1/stuffs")
@RestController
public class StuffController {
@PostMapping
public Mono<ResponseEntity<Stuff>> createStuff(
@Valid @NotNull @RequestBody Mono<Stuff> stuff) {
UUID id = UUID.randomUUID();
URI uri = UriComponentsBuilder.newInstance().pathSegment("v1", "stuffs", id.toString()).build().toUri();
// ugly approach with help of spring-hateoas, which resulted in a relative link too
// URI uri = WebFluxLinkBuilder.linkTo(WebFluxLinkBuilder.methodOn(StuffController.class).getStuff(id)).withSelfRel().toMono().block().toUri();
return stuff
.map(it -> stuffService.create(id, it))
.map(it -> ResponseEntity.created(uri).build());
}
@GetMapping("/{id}")
public Mono<ResponseEntity<Stuff>> getStuff(@NotNull @PathVariable("id") UUID id) {
// ...
}
}