У меня есть таблица PSQL
с одним столбцом, содержащим данные jsonb
:
CREATE TABLE IF NOT EXISTS user (
user_name VARCHAR(255) NOT NULL,
user_email VARCHAR(255) NOT NULL,
user_address jsonb NOT NULL
)
Для этого у меня есть java object
:
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import lombok.Builder;
import lombok.Value;
@Value
@Builder
public class User {
private String userName;
private String userEmail;
private UserAddress address;
@Value
@Builder
@JsonDeserialize(builder = UserAddress.UserAddressBuilder.class)
public static class UserAddress {
@JsonProperty("street")
private String street;
@JsonProperty("house_number")
private String houseNumber;
@JsonPOJOBuilder(withPrefix = "")
public static class UserAddressBuilder {
private String street = null;
private String houseNumber = null;
public UserAddressBuilder street(String street) {
this.street = street;
return this;
}
public UserAddressBuilder houseNumber(String houseNumber) {
this.houseNumber = houseNumber;
return this;
}
}
}
}
Когда я сейчаспостроить User
из ResultSet
:
return User.builder()
.userName(rs.getString(SqlConstants.TableUser.USER_NAME))
.userEmail(rs.getString(SqlConstants.TableUser.USER_EMAIL))
.userAddress(mapper.convertValue(rs.getString(SqlConstants.TableUser.USER_ADDRESS), User.UserAddress.class))
.build();
Я всегда получаю исключение:
Причина: com.fasterxml.jackson.databind.exc.MismatchedInputException:Невозможно создать экземпляр my.package.model.User$UserAddress$UserAddressBuilder
(хотя существует хотя бы один создатель): нет конструктора аргумента String / метода фабрики для десериализации из значения String ('"{\" street \ ": \" Some Street \ ", \" house_number \)": \" Некоторый номер дома \ "} ')
Я не могу найти источник этой проблемы, поскольку поля совпадают, не так ли? Я также попробовал подход без @Builder
и использовал @Data
, @AllArgsConstructor
и @NoArgsConstructor
вместо.
Я получаю тот же результат при использовании readValue
вместо convertValue