package jnpf.limsEntity; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import java.io.IOException; /** * 兼容 String / Array / Object 的反序列化器。 * 用于需要"把复杂 JSON 值原样存到 text 字段、回显时 JSON.parse"的场景, * 例如前端传的附件数组 [{fileId, url, ...}],后端存 JSON 字符串到 DB。 * *

规则: *

*/ public class JsonNodeAsStringDeserializer extends StdDeserializer { public JsonNodeAsStringDeserializer() { super(String.class); } @Override public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { JsonToken t = p.currentToken(); if (t == JsonToken.VALUE_NULL) { return null; } if (t == JsonToken.VALUE_STRING) { return p.getValueAsString(); } JsonNode node = p.readValueAsTree(); return node.toString(); } }