【发布时间】:2019-08-26 19:32:06
【问题描述】:
我需要反序列化这个 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){...}
包装类就是这个 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 没有 arg 构造函数或参数化? Order 和 OrderItem 构造函数呢?
-
@javapedia.net 我在 Order 和 OrderItem 上添加了带参数和不带参数的构造函数。还将构造函数添加到 OrderOderItem。还是一样的错误。
-
你能把所有的构造函数都扔掉,然后重试吗?
-
@javapedia.net 我删除了构造函数,但它仍然不起作用。 “acme.OrderController$OrderOrderItem`(尽管至少存在一个Creator):只能使用默认的、无参数的构造函数来实例化非静态内部类;嵌套异常是com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造
com.invillia.acme.OrderController$OrderOrderItem的实例(尽管至少存在一个 Creator):只能在 [Source: (PushbackInputStream); line: 2, column: 2]",
标签: java json spring-boot spring-mvc