转自:
SpringBoot使用@JsonDeserialize和@JsonSerialize注解的功能简介说明
下文笔者讲述@JsonDeserialize和@JsonSerialize注解的功能简介说明
SpringMVC
在SpringMVC
在Controller中接受请求的数据或返回数据
我们需使用@JsonDeserialize和@JsonSerialize处理数据
@JsonDeserializer
public class ParamToStrDeserializer extends JsonDeserializer<String> {
@Override
public 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<List<Integer>> {
@Override
public void serialize(
List<Integer> stateList, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
String join = StringUtils.join(stateList, ",");
jsonGenerator.writeString(join);
}
}
@JsonSerialize(using = MyJsonSerializer.class)
private List<Integer> args;
采用以上方式,前端收到的字符串是一个逗号分隔的字符串