无法将数组传递给 Spring 启动 Java

Ali*_*iti 1 java spring-boot spring-restcontroller

我正在尝试向 Sprin boot 发送一个 POST 请求,其中包含正文中的自定义对象列表。我在请求正文中的 JSON 是这样的:

[{"name":"name1","icon":"icon1"},
{"name":"name2","icon":"icon2"},
{"name":"name3","icon":"icon3"}]
Run Code Online (Sandbox Code Playgroud)

我得到这个错误

Cannot construct instance of `io.wedaily.topics.models.Topic` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
Run Code Online (Sandbox Code Playgroud)

我的控制器:

@PostMapping
public void createTopics(@RequestBody List<Topic> topics) {
    System.out.println(topics);
}
Run Code Online (Sandbox Code Playgroud)

我的主题模型:

public class Topic {

    private Long id;
    private String name;
    private String icon;
    private Date createdAt;
// Constructor
// Getters
// Setters
}
Run Code Online (Sandbox Code Playgroud)

小智 6

异常是非常明确的,它告诉你到底发生了什么。Jackson 需要一个默认的无参数构造函数,为您想要反序列化的每个字段定义 getter 和 setter,或者,您需要一个带有 Jackson 注释的构造函数,告诉它如何将 json 映射到您的构造函数中。

只需修改您的主题类以包含如下所示的默认构造函数。(如果您使用 lombok 注释您的课程@Data也可以解决问题)

public class Topic {
 private Long id; 
 private String name; 
 private String icon; 
 private Date createdAt; 

 public Topic(){
 }

 // Other all args constructor
 // Getters
 // Setters 
}
Run Code Online (Sandbox Code Playgroud)