我正在使用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
}
Request Body 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中的所有相关帖子都提到了第一个场景。我想知道为什么这不起作用。请帮忙。
答案 0 :(得分:5)
你必须制作你的内心课static
。
public class TransactionRequestModel {
public static class KeyValue {
String key;
String value;
//default constructor
//setter-getter
}
private int id;
private List<KeyValue> keyValueList;
public TransactionRequestModel(){}
//default constructor
//getter-setter
}