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。
*
*
规则:
*
* - null → null
* - 字符串 → 原样字符串
* - 数组 / 对象 / 数字 / 布尔 → 节点的 JSON 字符串形式
*
*/
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();
}
}