【发布时间】:2017-03-16 20:15:09
【问题描述】:
我正在使用 Spring 4.x 做 Spring Rest Api 项目
这行得通:
Controller.java
@PostMapping("newTransaction")
TransactionRequestModel insertNewTransaction(@RequestBody TransactionRequestModel model){
//do something
}
TransactionRequestModel.java
public class TransactionRequestModel {
private int id;
private List<KeyValue> keyValueList;
public TransactionRequestModel(){}
//default constructor
//getter-setter
}
KeyValue.java
public class KeyValue {
String key;
String value;
//default constructor
//setter-getter
}
请求正文 Json
{
"id": 1
"keyValueList": [
{
"key": "dummy",
"value": "dummy"
}
]
}
使用 jackson 的 Spring 消息转换器工作正常。
这不会:
当我将 TransactionRequestModel.java 更改为以下(并删除 KeyValue.java)
public class TransactionRequestModel {
public class KeyValue {
String key;
String value;
//default constructor
//setter-getter
}
private int id;
private List<KeyValue> keyValueList;
public TransactionRequestModel(){}
//default constructor
//getter-setter
}
意思是,将KeyValue设为内部类,出现以下错误。
org.springframework.http.converter.HttpMessageNotReadableException: 无法读取文档:没有找到适合类型的构造函数 [简单型、类 com.example.model.TransactionRequestModel$KeyValue]:不能 从 JSON 对象实例化(缺少默认构造函数或创建者, 或者可能需要添加/启用类型信息?)
为什么?
SO 中的所有相关帖子都提到了第一种情况。我想知道为什么这行不通。请帮忙。
【问题讨论】:
标签: spring spring-mvc