Я пытаюсь выяснить, могу ли я заменить мои существующие Pojos новыми классами Record в Java 14. Но не могу этого сделать. Получение следующей ошибки:
com.faster xml .jackson.databind.ex c .InvalidDefinitionException: невозможно создать экземпляр com.a.a.Post
(не существует создателей, таких как конструкция по умолчанию): невозможно десериализовать из значения объекта (без создателя на основе делегатов или свойств)
Я получаю сообщение об ошибке, в котором говорится, что запись не имеет конструкторов, но, как я вижу, класс записей позаботится об этом в background и соответствующие геттеры также устанавливаются в фоновом режиме (точно не getter, а id () title () и т. д. без префикса get). Это потому, что Spring еще не принял последнюю запись Java 14? Пожалуйста посоветуй. Спасибо.
Я делаю это в Spring Boot версии 2.2.6 и использую Java 14.
Следующее работает с использованием обычных POJO.
PostClass
public class PostClass {
private int userId;
private int id;
private String title;
private String body;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
Метод вызова службы отдыха, которая работает сейчас, когда я использую вышеуказанный POJO.
public PostClass[] getPosts() throws URISyntaxException {
String url = "https://jsonplaceholder.typicode.com/posts";
return template.getForEntity(new URI(url), PostClass[].class).getBody();
}
Но если я переключаюсь на следующее, где вместо этого использую запись, я получаю вышеуказанную ошибку.
Новый класс записи.
public record Post(int userId, int id, String title, String body) {
}
Изменение метода на использование записи вместо сбоя.
public Post[] getPosts() throws URISyntaxException {
String url = "https://jsonplaceholder.typicode.com/posts";
return template.getForEntity(new URI(url), Post[].class).getBody();
}
РЕДАКТИРОВАТЬ:
Попытка добавления конструкторов следующим образом к записи Post и та же ошибка:
public record Post(int userId, int id, String title, String body) {
public Post {
}
}
или
public record Post(int userId, int id, String title, String body) {
public Post(int userId, int id, String title, String body) {
this.userId = userId;
this.id = id;
this.title = title;
this.body = body;
}
}