java - 使用嵌套对象和列表反序列化 JSON。“JSON 解析错误:无法构造”
问题描述
我需要反序列化这个 JSON:
{
"order":{
"address": "Adress XXX",
"status": "Open",
"confirmationDates": "2019-04-03"
},
"orderItems": [
{
"description": "Item 1",
"unitPrice": 10.5,
"quantity": 2
},
{
"description": "Item 2",
"unitPrice": 22.5,
"quantity": 2
},
{
"description": "Item 3",
"unitPrice": 10000.5,
"quantity": 2
}
]
}
我正在使用 Spring Boot,并且对此正文有一个 Post 请求。
@PostMapping("/orderwithitems")
public ResponseEntity<Object> addOrderWithItems(@RequestBody OrderOrderItem orderOrderItem){...}
Wrapper 类是这个 POJO:
public class OrderOrderItem{
private Order order;
private List<OrderItem> orderItems;
public OrderOrderItem(){
orderItems = new ArrayList<>();
order = new Order();
}
public OrderOrderItem(Order order, List<OrderItem> orderItems) {
this.order = order;
this.orderItems = orderItems;
}
...
}
问题是当我发帖时出现此错误:
{
"timestamp": "2019-04-04T23:04:19.640+0000",
"status": 400,
"error": "Bad Request",
"message": "JSON parse error: Cannot construct instance of `com.invillia.acme.OrderController$OrderOrderItem` (although at least one Creator exists): can only instantiate non-static inner class by using default, no-argument constructor; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.invillia.acme.OrderController$OrderOrderItem` (although at least one Creator exists): can only instantiate non-static inner class by using default, no-argument constructor\n at [Source: (PushbackInputStream); line: 2, column: 2]",
"path": "/orderwithitems"
}
我正在尝试遵循这些示例: https ://www.baeldung.com/jackson-collection-array
https://www.baeldung.com/spring-rest-template-list
但我找不到解决方案。
解决方案
问题是我将“OrderOrderItem”声明为控制器的内部类。将 OrderOrderItem 移动到新文件可以使事情正常工作。
推荐阅读
- linux - 使用powershell在linux发行版中获取文件名和文件扩展名
- testing - 测试咖啡馆:第一次测试中未处理的承诺拒绝使第二次测试通过,即使它必须通过抛出未处理的承诺拒绝而失败
- c# - 为什么控制台应用程序需要这么长时间才能启动
- java - 在 Wildfly 中使用 ejb-remoting 时,重负载会在 netty 中产生可能的内存泄漏
- ruby-on-rails - 将表映射到适当的 ActiveRecord::Model
- java - 用于循环代码助手 Netbeans 的 Intellij IDEA
- sql - 在查询 where 子句中使用复杂的大小写
- sql-server - 从 SQL Server 中的字符串中删除单词列表
- shell - 通过 Oozie shell 动作运行 spark2 作业?
- c# - Azure DevOps - 通过 Api 更新用户配置文件