我正在使用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 }
请求正文
{ "id": 1 "keyValueList": [ { "key": "dummy", "value": "dummy" } ] }
使用杰克逊的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中的所有相关文章都提到了第一种情况。我想知道为什么这行不通。请帮忙。
你必须使自己的内在阶级static。
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 }