![](/img/trans.png)
[英]Spring REST API Swagger UI @ModelAttribute request URL and parameter type
[英]Spring rest api same url for bulk and single request
我想在 Spring 啟動應用程序中有這個 API:
發布/項目
{
"name": "item1"
}
發布/項目
[
{
"name": "item1"
},
{
"name": "item2"
},
]
因此,同一端點可以接受 json 主體中的數組或單個元素。
不幸的是,這不起作用:
@PostMapping(path="items")
public ResponseEntity<String> items(@RequestBody Item item) {}
@PostMapping(path="items")
public ResponseEntity<String> items(@RequestBody List<Item> items) {}
我也試過這個:
@PostMapping(path="items")
public ResponseEntity<String> items(@RequestBody @JsonFormat(with= JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY) List<Item> items) {}
它不起作用。
如果我像這樣包裝列表:
public class Items {
@JsonFormat(with= JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
private List<item> items;
}
那么不幸的是,我的請求正文將如下所示:
{
"items": [
{
"name": "item1"
},
{
"name": "item2"
},
]
}
你知道我怎么能有這樣的 API 和 spring 引導?
您需要一個可以直接保存數組或 Object 的變量。 由於 Java 的 Static 類型限制,沒有直接的方法可以實現類似的目標。
到目前為止,我能想象到的唯一方法是創建一個采用某種通用類型的 API。
像Object
:
@PostMapping(path="items")
public ResponseEntity<String> items(@RequestBody Object body) {
if(body instanceof List) {
} else {
}
}
或String
:
@PostMapping(path="items")
public ResponseEntity<String> items(@RequestBody String body) {
if(body.charAt(0) == '[' && body.charAt(body.length() - 1) == ']') {
} else if(body.charAt(0) == '{' && body.charAt(body.length() - 1) == '}') {
} else {
}
}
您將不得不手動完成大量工作。
此外,您不能創建具有相同路徑/items
和相同方法POST
的兩個 API,它們會引發編譯時錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.