[英]Return 201 Created status with specific body in Spring Webflux
我在控制器中定義了以下REST端點:
@PostMapping(value = "/data",
consumes = { "application/json" },
produces = { "application/json" })
@ResponseBody
public Mono<ServerResponse> create(
final @ApiParam(value = "data", required = true) @Valid @RequestBody Data data) {
Data saved = dataDAO.save(app);
return saved != null
? ServerResponse.created(UriComponentsBuilder.fromPath("data/" + saved.getId()).build().toUri()).
contentType(MediaType.APPLICATION_JSON).
body(BodyInserters.fromObject(saved))
: Mono.error(new CustomException("Error"));
}
但是當我調用/data
我得到一個Error: Not Acceptable
:
{
"timestamp": 1562229060618,
"path": "/data",
"status": 406,
"error": "Not Acceptable",
"message": "Could not find acceptable representation"
}
所以我認為端點的定義中存在一些問題,因為最后數據是在數據庫中正確創建的。
我究竟做錯了什么? 用我想要的主體( Data
類型)返回201 Created狀態的正確方法是什么?
該錯誤是否與無法識別要返回的有效數據有關?
謝謝
關於您的第一個問題,我不知道,因為您沒有發布請求的外觀或Data
對象的外觀,因此可能是任何東西。 當您沒有全部了解時,這種事情很難解決。
但是我要回答你的第二個問題:
用我想要的主體(數據類型)返回201創建狀態的正確方法是什么?
Data saved = dataDAO.save(app);
上面的,是一個阻止呼叫。 它將調用您的數據庫並等待,直到將其Data
對象取回。
由於我不知道您使用的是哪個數據庫,但是此調用應包裝在Mono.fromCallable
以便根據反應性文檔wrap阻塞調用 ,此阻塞調用將從elastic
線程池中獲取其自己的線程
return Mono.fromCallable(() -> {
return dataDAO.save(app);
}).subscribeOn(Schedulers.elastic())
.flatMap(data -> {
return ServerResponse.ok().syncBody(data);
});
我不知道您的dao中有什么內容,所以我不會編寫任何錯誤處理,但是我會從中返回一個可選的而不是null
,更加簡潔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.