我现在正在搜索这个问题两天,没有适当的解决方案。
我有一个带有表格的PostgreSQL数据库:
CREATE TABLE mytable (key text PRIMARY KEY, content text)
此外,我有一个带有JPA实体类的Java SpringBoot-Application:
@Entity
@Table(name = "mytable")
public class MyEntity {
@Id
private String key;
// tell JPA to convert MyPojo to JSON using the default Jackson ObjectMapper
private MyPojo content;
// constructors, getters, setters
}
MyPojo
类包含涉及基本类型,地图,列表和其他嵌套POJO类的子结构。为MyPojo
类和所有其他嵌套POJO类编写转换器似乎不太方便。相反,我想使用Jackson来序列化/反序列化它。
如何配置Jackson / JPA将MyPojo
对象作为JSON字符串存储在数据库表的文本字段中?我希望有一个合适的注释,如@Convert(converter=Jackson.ObjectMapper)
。向String
类引入额外的MyEntity
字段是另一种无效的方法。
我成功地使用Jackson将MyPojo
个对象作为JSON字符串发送/解析到REST接口,但是我很难将相同的字符串放入数据库的文本字段中。
答案 0 :(得分:1)
您可以定义转换器以在Pojo和JSON之间进行转换,并使用Jackson进行转换:
@Converter
public class MyPojoToJsonConverter implements AttributeConverter<MyPojo, String>{
ObjectMapper objectMapper = new ObjectMapper();
@Override
public String convertToDatabaseColumn(MyPojo myPojo) {
String json = "";
try {
json = objectMapper.writeValueAsString(myPojo);
} catch (JsonProcessingException jpe) {
// Handle exception
}
return json;
}
@Override
public MyPojo convertToEntityAttribute(String myPojoAsJson) {
MyPojo myPojo = null;
try {
myPojo = objectMapper.readValue(myPojoAsJson, MyPojo.class);
} catch (JsonParseException e) {
// HandleException
} catch (JsonMappingException e) {
// HandleException
} catch (IOException e) {
// HandleException
}
return myPojo;
}
}
然后,您可以使用@Convert注释在您的实体的属性中设置此转换器:
@Entity
@Table(name = "mytable")
public class MyEntity {
@Id
private String key;
@Convert(converter=MyPojoToJsonConverter.class)
private MyPojo content;
}
答案 1 :(得分:0)
MyPojo应该是一个字符串而不是您实体中的对象。把你的JSON放在String中,应该是全部。