注意事项:
首先接受参数分form和json:
addFormatters 对于form入参转换有用;
configureMessageConverters 对于json入参转换有用;(注意将json转换器加到列表前面)
@Configuration
public class MyConfig implements WebMvcConfigurer {
//此处处理form入参参数的转换
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(dateConverter());
registry.addConverter(localDateTimeConverter());
registry.addConverter(localDateConverter());
}
public Converter<String, Date> dateConverter() {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Converter<String, Date> converter = new Converter<String, Date>() {
@Override
public Date convert(String s) {
try {
return format.parse(s);
} catch (ParseException e) {
e.printStackTrace();
return new Date();
}
}
};
return converter;
}
public Converter<String, LocalDateTime> localDateTimeConverterConverter() {
Converter<String, LocalDateTime> converter = new Converter<String, LocalDateTime>() {
@Override
public LocalDateTime convert(String s) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return LocalDateTime.from(formatter.parse(s));
}
};
return converter;
}
//此处设置添加格式转换器的位置为0,不加默认加到后面,则默认走jackson
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(0,extendMessageConverters());
}
//@Bean
public FastJsonHttpMessageConverter extendMessageConverters() {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
converter.setDefaultCharset(Charset.forName("UTF-8"));
converter.setSupportedMediaTypes(Arrays.asList(
MediaType.APPLICATION_JSON_UTF8));
FastJsonConfig config = new FastJsonConfig();
config.setSerializerFeatures(SerializerFeature.WriteNullListAsEmpty,
SerializerFeature.WriteNullStringAsEmpty,
SerializerFeature.DisableCircularReferenceDetect);
//设置Date序列化
config.setDateFormat("yyyy-MM-dd HH:mm:ss");
converter.setFastJsonConfig(config);
SerializeConfig serializeConfig = SerializeConfig.globalInstance;
//将long值改为字符串显示,解决js精度缺失问题
serializeConfig.put(BigInteger.class, ToStringSerializer.instance);
serializeConfig.put(Long.class, ToStringSerializer.instance);
serializeConfig.put(Long.TYPE, ToStringSerializer.instance);
//返回序列化后的时间格式;
serializeConfig.put(LocalDateTime.class, (jsonSerializer, o, o1, type, i) -> {
SerializeWriter out = jsonSerializer.out;
if (o == null) {
out.writeNull();
} else {
LocalDateTime result = (LocalDateTime) o;
out.writeString(result.format(DateTimeFormatter.ofPattern("yyyy/-MM/dd HH:mm:ss")));
}
});
config.setSerializeConfig(serializeConfig);
return converter;
}
//@Bean
public Jackson2ObjectMapperBuilderCustomizer customJackson() {
return jacksonObjectMapperBuilder -> {
//若POJO对象的属性值为null,序列化时不进行显示
jacksonObjectMapperBuilder.serializationInclusion(JsonInclude.Include.NON_NULL);
//针对于Date类型,文本格式化
jacksonObjectMapperBuilder.simpleDateFormat("yyyy/MM/dd HH:mm:ss");
//针对于JDK新时间类。序列化时带有T的问题,自定义格式化字符串
JavaTimeModule javaTimeModule = new JavaTimeModule();
//序列化
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//反序列化
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
jacksonObjectMapperBuilder.modules(javaTimeModule);
};
}
// @Bean
public GsonHttpMessageConverter gsonHttpMessageConverter() {
GsonHttpMessageConverter gsonHttpMessageConverter = new GsonHttpMessageConverter();
GsonBuilder b = new GsonBuilder();
b.setDateFormat("yyyy-MM-dd HH:mm:ss").
registerTypeAdapter(LocalDateTime.class, (JsonSerializer<LocalDateTime>) (time, type, jsonSerializationContext) ->
new JsonPrimitive(time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))).
// registerTypeAdapter(LocalDateTime.class, (JsonDeserializer<LocalDateTime>) (json, type, jsonDeserializationContext) -> {
// String datetime = json.getAsJsonPrimitive().getAsString();
// return LocalDateTime.parse(datetime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
// }).
registerTypeAdapter(LocalDate.class, (JsonDeserializer<LocalDate>) (json, type, jsonDeserializationContext) -> {
String datetime = json.getAsJsonPrimitive().getAsString();
return LocalDate.parse(datetime, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
});
gsonHttpMessageConverter.setGson(b.create());
gsonHttpMessageConverter.setSupportedMediaTypes(Arrays
.asList(MediaType.APPLICATION_JSON));
return gsonHttpMessageConverter;
}
}
响应参数的格式化设置:
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8