Hibernate父子关联序列化处理
问题描述
Hibernate持久化时,包含父子级关联,如果父子级属性对象存在,即使该父子级对象为空,即“{}”,序列化时会将其自我关联
解决思路
Jackson序列化处理
- 在外部json数据序列化当前对象时,父子级字段上添加制定序列化方法,即
@JsonDeserialize(using = ObjectDeserializer.class) private DataCatagoryDto parent;
-
指定序列化方法
public class ObjectDeserializer <T extends BaseEntityDto> extends JsonDeserializer<T> implements ContextualDeserializer { private JavaType type; public ObjectDeserializer() { } public ObjectDeserializer(JavaType type) { this.type = type; } /** * 序列化方式 */ @Override public T deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { ObjectCodec codec = p.getCodec(); JsonNode jsonNode = codec.readTree(p); if (jsonNode.isObject() && !StringUtils.isEmpty(jsonNode.get("uuid").toString()) && !"null".equals(jsonNode.get("uuid").toString())){ return (T) JsonUtil.fromJSON(jsonNode.toString(),type.getRawClass()); } return null; } /** * 序列化统一处理时需要实现ContextualDeserializer,并实现下列方法 */ @Override public JsonDeserializer<?> createContextual(DeserializationContext ctxt, BeanProperty property) throws JsonMappingException { JavaType type = ctxt.getContextualType() != null ? ctxt.getContextualType() : property.getMember().getType(); return new ObjectDeserializer<>(type); } }