gpt4 book ai didi

Spring rest api 相同的 url 用于批量和单个请求

转载 作者:行者123 更新时间:2023-12-05 06:49:53 26 4
gpt4 key购买 nike

我想在 Spring Boot 应用程序中使用此 API:

POST/项目

{
"name": "item1"
}

POST/项目

[
{
"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"
},
]
}

你知道我如何使用 spring boot 拥有这样的 API 吗?

最佳答案

您需要一个可以直接保存数组或对象的变量。由于 Java 的静态类型限制,没有直接的方法来实现类似的东西。

到目前为止,我能想到的实现此类目标的唯一方法是创建一个采用某种泛型类型的 API。

像一个对象:

@PostMapping(path="items")
public ResponseEntity<String> items(@RequestBody Object body) {
if(body instanceof List) {

} else {

}
}

或者一个字符串:

@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,它们会引发编译时错误。

关于Spring rest api 相同的 url 用于批量和单个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66496051/

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