Я делаю проект Spring Rest Api с весны 4.xSpring @Requestbody не отображение на внутренний класс
Это Работает:
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
}
Запрос Body Json
{
"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]: не может Instantiate из объекта JSON (отсутствует конструктор по умолчанию или творца, или, возможно, необходимо добавить/включить информацию о типе?)
Почему?
Все связанное сообщение в SO упоминает первый сценарий. Я хотел бы знать, почему это не сработает. Пожалуйста помоги.
Thanks @Strelok. Это сработало. Но скажите, пожалуйста, почему мы должны это делать. –
Вы можете обратиться к этому ответу за хорошим объяснением. http://stackoverflow.com/questions/70324/java-inner-class-and-static-nested-class – Strelok