gpt4 book ai didi

java - 使用 Spring Webflux 的 HTTP 201 的绝对位置 header

转载 作者:行者123 更新时间:2023-12-04 04:17:56 25 4
gpt4 key购买 nike

我有一个响应式(Reactive) REST Controller (使用 Spring WebFlux),在执行 POST 请求时,我想设置一个指向刚创建的资源的绝对链接进入强制性 Location header 。到目前为止,我只能创建相对 链接。以任意顺序添加 org.springframework.http.server.reactive.ServerHttpRequestorg.springframework.web.server.ServerWebExchange 作为附加方法参数检索主机信息等导致未到达 Controller 方法的 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) {
// ...
}

}

最佳答案

UriComponentsBuilder componentsBuilder 添加到 Controller 的方法签名应该可以使其工作:

@PostMapping
public Mono<ResponseEntity<Stuff>> createStuff(
@Valid @NotNull @RequestBody Mono<Stuff> stuff,
UriComponentsBuilder componentsBuilder) {
...
URI uri = componentsBuilder.path("/v1/stuffs/{id}").buildAndExpand(id.toString()).toUri();
...
}

关于java - 使用 Spring Webflux 的 HTTP 201 的绝对位置 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60174351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com