带Hibernate的java Jackson用于序列化以避免枚举
我有一个实体订单,它与OrderType实体有多对一的关系
Order{
OrderType type;
}
OrderType{
int id;
String tag; //This field is uniq
}
两者都是休眠实体。当我序列化(使用jackson)时,我得到的类型是一个对象,顺序如下
"type" : {
"id":1,
"tag" : "TEST"
}
但我更愿意把我的类型显示为
"type" : "TEST"
类似地,在反序列化时,我需要创建OrderType对象,即使类型值是它的字符串等价物
"type" : "TEST"
应该构造
{
"id":1,
"tag" : "TEST"
}
它必须是由唯一字段标记映射的hibernate对象,如果字符串不存在,则需要抛出异常
有人能给我建议实现这一目标的最佳方法吗
# 1 楼答案
看看Jackson自定义序列化程序和反序列化程序。它们是用于创建自定义序列化和反序列化对象图的Jackson 2功能。见第here条和第here条
# 2 楼答案
序列化:只需将
@JsonValue
注释添加到OrderType.tag
字段(或getter方法)反序列化:可以添加静态
@JsonCreator
注释的方法:如果您可以在这个静态方法中轻松地获得与当前线程相关的Hibernate会话,那么您只需填写实现以查询订单类型
# 3 楼答案
根据Jackson docs,您可以尝试使用注释来获取不同的json字段,并忽略其他内容。同样,类似的问题和答案与here类似
当您序列化订单实体时,它应该生成
{"type":"typeValue"}