1.springboot框架统一处理
@Configuration
public class JacksonConfig {
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder
.serializerByType(Long.class, ToStringSerializer.instance)
.serializerByType(Long.TYPE, ToStringSerializer.instance)
.serializerByType(Date.class, new DateSerializer(false,new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")));
}
}
2.使用阿里巴巴 Fastjson
SerializeConfig serializeConfig = new SerializeConfig();
serializeConfig.put(Long.class, IESToStringSerializer.instance);
serializeConfig.put(Long.TYPE, IESToStringSerializer.instance);
serializeConfig.put(Date.class, new IESTimeSerializer("yyyy-MM-dd HH:mm:ss"));
String dataStr = JSONObject.toJSONString(data, serializeConfig, SerializerFeature.WriteMapNullValue);
2.1 长整型转字符串,防止前端因数值过大导致的精度丢失
public class IESToStringSerializer implements ObjectSerializer {
public static final IESToStringSerializer instance = new IESToStringSerializer();
public IESToStringSerializer() {
}
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
SerializeWriter out = serializer.out;
if (object == null) {
out.writeNull();
}else {
String strVal = object.toString();
out.writeString(strVal);
}
}
}
2.2 日期统一处理(@JsonFormat注解属性按注解格式处理)
public class IESTimeSerializer implements ObjectSerializer{
private final String pattern;
public IESTimeSerializer(String pattern) {
this.pattern = pattern;
}
@SneakyThrows
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName,
Type fieldType, int features) throws IOException {
if (object == null) {
serializer.out.writeNull();
return;
}
final Date date = (Date) object;
if(null != serializer.getContext() && null != serializer.getContext().object && null != fieldName){
Class<?> clazz = serializer.getContext().object.getClass();
Field declaredField = clazz.getDeclaredField(fieldName.toString());
JsonFormat annotation = declaredField.getAnnotation(JsonFormat.class);
if(null != annotation && StrUtil.isNotBlank(annotation.pattern())){
serializer.write(DateUtil.format(date,annotation.pattern()));
return;
}
}
serializer.write(DateUtil.format(date,pattern));
}
}