针对 Spring Boot 休息服务发布一个 JSON 对象,其中包含布尔值列表列表



我有一个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() {
}

因此,请显式添加默认的无参数构造函数,您应该很高兴;-(