环境:SpringBoot 2.1.5.RELEASE
需求:一些涉及到前后端的项目接口返回的实体类进行序列化, 一些字段可能需要特定的格式化,例如Float的字段会带.0后缀,其他的可能要求保留两位小数或者其他的格式化需求。
通过增加返回Vo实体的字段,进行循环方法处理是常规的解决方案,
但是其实无论fastjson还是jackson都是支持自定义序列化实现类,通过注解方式来改变返回字段的格式。
//实体类
@Data
public class User {
@JsonSerialize(using=CustomDoubleIntSerialize.class)
private Float newUsers;
}
//自定义序列化
public class CustomDoubleIntSerialize extends JsonSerializer {
private DecimalFormat df = new DecimalFormat("###.##");
@Override
public void serialize(Float value, JsonGenerator jgen,
SerializerProvider provider) throws IOException,
JsonProcessingException {
jgen.writeString(df.format(value));
}
}
//实体类
@Data
public class User {
@JSONField(serializeUsing = AValueSerializer.class)
private Float newUsers;
}
//自定义序列化实现
public class AValueSerializer implements ObjectSerializer {
private DecimalFormat df = new DecimalFormat("###.##");
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
int features) throws IOException {
Float value = (Float) object;
String text = df.format(value) + "元";
serializer.write(text);
}
}
上面的使用只是单个序列化的例子,像是时间格式、数字格式或者其他、格式其实都是可以按照上面的方法去进行自定义,优雅的通过注解解决了json格式的返回问题。
页面更新:2024-04-15
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号