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。
|
*
|
* <p>规则:
|
* <ul>
|
* <li>null → null</li>
|
* <li>字符串 → 原样字符串</li>
|
* <li>数组 / 对象 / 数字 / 布尔 → 节点的 JSON 字符串形式</li>
|
* </ul>
|
*/
|
public class JsonNodeAsStringDeserializer extends StdDeserializer<String> {
|
|
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();
|
}
|
}
|