转自:
SpringBoot使用@JsonDeserialize和@JsonSerialize注解的功能简介说明
下文笔者讲述@JsonDeserialize和@JsonSerialize注解的功能简介说明
SpringMVC在SpringMVC在Controller中接受请求的数据或返回数据我们需使用@JsonDeserialize和@JsonSerialize处理数据
@JsonDeserializer
public class ParamToStrDeserializer extends JsonDeserializer{@Overridepublic String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {TreeNode treeNode = jsonParser.getCodec().readTree(jsonParser);if (treeNode instanceof IntNode) {return ((IntNode) treeNode).asText();} else if (treeNode instanceof LongNode) {return ((LongNode) treeNode).asText();} else if (treeNode instanceof ArrayNode) { //字符串数组,会多出两个引号,需要手动去除return StringUtils.replace(StringUtils.join((ArrayNode) treeNode, ","), "\"", "");} else if (treeNode instanceof TextNode) {return ((TextNode) treeNode).asText();}return "";} }
使用ParamToStrDeserializer的转化 无论传的值是数字 如:【88】或者【"88"】;还是数组 如【[10,20,30]】或者【["10","20","30"]】可统一转化为用逗号分隔的字符串格式 例: 在需要自动转化的字段上加上注解 @JsonDeserialize(using = ParamToStrDeserializer.class) private String args; 采用以上注解,则args会自动处理为相应格式
@JsonSerialize
@JsonSerialize的用法,@JsonDeserialize的反向用法。
public class MyJsonSerializer extends JsonSerializer> {@Overridepublic void serialize(List
stateList, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {String join = StringUtils.join(stateList, ",");jsonGenerator.writeString(join);} } @JsonSerialize(using = MyJsonSerializer.class) private List args; 采用以上方式,前端收到的字符串是一个逗号分隔的字符串