SpringBoot配置前端字符串转Date和Date转json格式
方式一 修改配置文件
#json格式化全局配置
#配置时区
spring.jackson.time-zone=GMT+8
#配置Date类型转json的格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
#配置对象转josn时忽略null值的熟悉
spring.jackson.default-property-inclusion=NON_NULL
#配置前端传入的日期格式,用于字符串转Date
spring.mvc.date-format=yyyy-MM-dd HH:mm:ss
方式二 通过配置类方式配置
配置controller返回Date转字符串格式
- 自定义SimpleDateFormat
public class CustomDateFormat extends SimpleDateFormat {
public String defaultDateFormat;
public CustomDateFormat(String pattern){
this.defaultDateFormat = pattern;
}
/**
* 前端传的日期字符串转Date
*/
@Override
public Date parse(String dateStr, ParsePosition pos) {
//调用hutool工具类转日期
return StrUtil.isBlank(dateStr) ? null : DateUtil.parse(dateStr);
}
@Override
public Date parse(String dateStr) {
return parse(dateStr, new ParsePosition(0));
}
@Override
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition){
return new StringBuffer(DateUtil.format(date,defaultDateFormat));
}
}
- 配置mvcjson序列化规则
@Configuration
public class WebConfig implements WebMvcConfigurer {
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss");
@Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
private String defaultDateFormat;
@Value("${spring.jackson.time-zone:UTC}")
private String defaultTimeZone;
public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
//设置日期格式
ObjectMapper objectMapper = new ObjectMapper();
//配置自定义的SimpleDateFormat
objectMapper.setDateFormat(new CustomDateFormat(defaultDateFormat));
//支持LocalDateTime、LocalDate、LocalTime的序列化
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DATE_TIME_FORMATTER));
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DATE_FORMATTER));
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(TIME_FORMATTER));
objectMapper.registerModule(javaTimeModule);
// 设置时区
objectMapper.setTimeZone(TimeZone.getTimeZone(defaultTimeZone));
mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);
//忽略不能识别的字段
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//忽略非空字段
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
//设置中文编码格式
List<MediaType> list = new ArrayList<MediaType>();
list.add(MediaType.APPLICATION_JSON);
mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list);
return mappingJackson2HttpMessageConverter;
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
//将fackson添加到视图消息转换器列表内
converters.add(0,getMappingJackson2HttpMessageConverter());
}
}
配置Controller接收日期字符串转成date的格式
可以将前端转来的字符串转成Date,只针对@requestParam都有效
- 新建Convert类
@Component
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String source) {
try {
//使用Hutool工具类转日期
return DateUtil.parse(source);
} catch (Exception e) {
return null;
}
}
}
- 配置
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
public ConversionService getConversionService(DateConverter dateConverter){
ConversionServiceFactoryBean factoryBean = new ConversionServiceFactoryBean();
Set<Converter> converters = new HashSet<>();
converters.add(dateConverter);
factoryBean.setConverters(converters);
return factoryBean.getObject();
}
}