orr*_*ymr 5 java spring json jackson spring-boot
我正在发布这样的内容:
{
"stuff": [
{
"thingId": 1,
"thingNumber": "abc",
"countryCode": "ZA"
},
{
"thingId": 2,
"thingNumber": "xyz",
"countryCode": "US"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我可以按如下方式检索控制器中的数据:
@RequestMapping(value = "/stuffs", method = RequestMethod.POST)
public String invoices(@RequestBody Map<String, List <Stuff>> stuffs) {
return "Hooray";
}
Run Code Online (Sandbox Code Playgroud)
我真正想做的是只将一个 List of Stuff 传入控制器;IE:
@RequestMapping(value = "/stuffs", method = RequestMethod.POST)
public String invoices(@RequestBody List <Stuff> stuffs) {
return "I'm sad that this won't work.";
}
Run Code Online (Sandbox Code Playgroud)
然而,杰克逊并不喜欢这样。我得到的错误如下:
无法读取 JSON 文档:无法从 START_OBJECT 令牌中反序列化 java.util.ArrayList 的实例\n 在 [来源:java.io.PushbackInputStream@2a30a2f4; 行:1,列:1];嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException:无法从 START_OBJECT 令牌中反序列化 java.util.ArrayList 的实例\n 在 [来源:java.io.PushbackInputStream@2a30a2f4; 行:1,列:1]
我无法发送以下内容(因为它不是有效的 JSON):
{
[
{
"thingId": 1,
"thingNumber": "abc",
"countryCode": "ZA"
},
{
"thingId": 2,
"thingNumber": "xyz",
"countryCode": "US"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我确信这很简单,但我无法从我的 StackOverflow 和 Google 搜索中提取答案。
任何帮助,将不胜感激!:)
请注意,如果您尝试获取没有 Java 类的 JSON 数组(OP 问题中的类是“Stuff”),您将需要像这样设置 Spring Boot 控制器:
@RequestMapping(value = "/stuffs", method = RequestMethod.POST)
public String invoices(@RequestBody Map<String, Object> [] stuffs) {
return "Hooray";
}
Run Code Online (Sandbox Code Playgroud)
你只需要在没有大括号的情况下发送这个
[
{
"thingId": 1,
"thingNumber": "abc",
"countryCode": "ZA"
},
{
"thingId": 2,
"thingNumber": "xyz",
"countryCode": "US"
}
]
Run Code Online (Sandbox Code Playgroud)
在你的控制器中,当你告诉杰克逊它应该解析一个列表时,它应该是一个列表而不是一个包含列表的对象
| 归档时间: |
|
| 查看次数: |
17042 次 |
| 最近记录: |