我有一个Python客户端,可以将json对象发布到我的Spring Boot服务器。
客户端代码如下所示:
jsonTest = {
"room": lists
}
json_list = json.dumps(jsonTest)
requests.post('http://localhost:8082/room', json=json_list)
客户端代码是这样的:
房间等级:
public class Room {
@JsonProperty("room")
private List<List<Boolean>> roomList;
public Room(List<List<Boolean>> roomList) {
this.roomList = roomList;
}
public List<List<Boolean>> getRoomList() {
return roomList;
}
public void setRoomList(List<List<Boolean>> roomList) {
this.roomList = roomList;
}
}
控制器:
@RestController
public class GreetingController {
@PostMapping(value = "/room")
public Room room(@RequestBody Room newRoom) {
return newRoom;
}
}
执行帖子时,出现以下错误:
Servlet.service(( for servlet [dispatcherServlet] 在上下文中与路径 [] 抛出异常 [请求处理失败;嵌套异常是 org.springframework.http.converter.HttpMessageConversionException: 类型定义错误: [simple type, class de.lukas.broetje.findaway.movement.Room]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 无法构造
de.luckes.findaway.movement.Room
实例(不存在创建者,如默认构造(:no 字符串参数从字符串值('{"房间":[[假,假,...(这里有很多内容(.....,假的,假的]]}'( 在 [来源: (PushbackInputStream(; 行: 1, 列: 1]] 与根本原因
我的问题是:为什么杰克逊不转换 JSON 对象?
因为您已经提供了以下自定义构造函数,因此Java编译器不会生成默认的无参数构造函数。
public Room(List<List<Boolean>> roomList) {
this.roomList = roomList;
}
错误消息说您需要在Room
类中提供一个默认的 no-args 构造函数,例如
public Room() {
}
因此,请显式添加默认的无参数构造函数,您应该很高兴;-(