我正在使用Spring 4.x进行Spring Rest Api项目
这个作品:
Controller.java
@PostMapping("newTransaction")
TransactionRequestModel insertNewTransaction(@RequestBody TransactionRequestModel model){
//do something
}
Run Code Online (Sandbox Code Playgroud)
TransactionRequestModel.java
public class TransactionRequestModel {
private int id;
private List<KeyValue> keyValueList;
public TransactionRequestModel(){}
//default constructor
//getter-setter
}
Run Code Online (Sandbox Code Playgroud)
KeyValue.java
public class KeyValue {
String key;
String value;
//default constructor
//setter-getter
}
Run Code Online (Sandbox Code Playgroud)
请求身体Json
{
"id": 1
"keyValueList": [
{
"key": "dummy",
"value": "dummy"
}
]
}
Run Code Online (Sandbox Code Playgroud)
使用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
}
Run Code Online (Sandbox Code Playgroud)
意味着,使KeyValue成为内部类,得到以下错误.
org.springframework.http.converter.HttpMessageNotReadableException:无法读取文档:找不到类型[simple type,class com.example.model.TransactionRequestModel $ KeyValue]的合适构造函数:无法从JSON对象实例化(缺少默认构造函数或创建者,或者可能需要添加/启用类型信息?)
为什么?
SO中的所有相关帖子都提到了第一个场景.我想知道为什么这不起作用.请帮忙.
你必须做你的内心阶级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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3091 次 |
| 最近记录: |