我有一个实体订单,它与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对象,并且如果字符串不存在则需要抛出异常。
有人可以建议我实现它的最佳途径。
答案 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会话,那么你只需填写实现来查询订单类型。