杰克逊用Hibernate进行序列化以避免枚举

时间:2015-10-06 07:12:43

标签: java hibernate jackson

我有一个实体订单,它与OrderType实体有多对一的关系。

Order{
   OrderType type;
}

OrderType{
   int id;
   String tag; //This field is uniq
}

两者都是休眠实体。当我序列化(使用杰克逊)时,我将类型作为对象按顺序

"type" : {
   "id":1,
   "tag" : "TEST"
}

但我更愿意将我的类型显示为

"type" : "TEST"

类似地,在反序列化时,我需要创建OrderType对象,即使类型值将是它的字符串等效。

"type" : "TEST"应该构建

{
   "id":1,
   "tag" : "TEST"
}

并且必须是由唯一字段标记映射的hibernate对象,并且如果字符串不存在则需要抛出异常。

有人可以建议我实现它的最佳途径。

3 个答案:

答案 0 :(得分:0)

According to Jackson docs , you may try annotations to get your different json fields and ignore etc. Also similar question and answer is here like this situation.

Order{
   @JsonUnwrapped
   OrderType type;
}

OrderType{
   @JsonIgnore
   int id;
   @JsonProperty("type")
   String tag;
}

It should produce {"type":"typeValue"} when you serialized Order entity.

答案 1 :(得分:0)

take a look at Jackson Custom Serializers and Deserializers. They are Jackson 2 features used to create custom serialization and deserialization object graph . See both articles here and here

答案 2 :(得分:0)

序列化:只需将@JsonValue注释添加到OrderType.tag字段(或getter方法)。

反序列化:您可以添加静态@JsonCreator - 带注释的方法:

public class OrderType {
   @JsonCreator public static OrderType fromJson(String tagText) {
   }
}

如果你可以在这个静态方法中轻松掌握与当前线程相关的Hibernate会话,那么你只需填写实现来查询订单类型。