上一篇文我们讲到 Spring Mvc时间格式参数,前后时间传参,单个字段的时间格式化问题
那我们要做项目肯定会遇到好多的时间参数问题,要是每个字段都去加参数岂不麻烦,今天我们讲讲全局时间参数格式化问题(LocalDate/LocalDateTime类型)
一、建包,建类
1. 在你的controller同级别目录里创建一个文件夹,再创建一个子文件(我这里父级文件叫common,子文件我创了个叫controller的,此controller 非彼controller,文件夹而已),用于存放入参格式化
创建类(我这里叫InitBinderAdviseController)
2. 在你的controller同级别目录里创建一个文件夹,再创建一个子文件(我这里父级文件叫config),用于存放出参格式化
创建类(我这里叫WebMvcConfig )
如何反驳这样建包
答就是为了整齐好看,因为我这个东西用到了太多别的需要分类,
二、在建的类里面加入“项目全局的入参格式化”
@ControllerAdvice 是spring 3.2提供的新注解,它是一个controller增强器,可以对controller中使用到@RequestMapping注解的方法做逻辑处理
@InitBinder用于在控制器(Controller)中标注于方法上,表示为当前控制器注册一个属性编辑器,只对当前的Controller有效。@InitBinder标注的方法必须有一个参数WebDataBinder。webDataBinder是用于表单到方法的数据绑定的。所谓的属性编辑器可以理解就是帮助我们完成参数绑定。
@ControllerAdvice
public class InitBinderAdviseController {
/**
* 将前台传递过来的日期格式的字符串,自动转化为时间类型
*/
@InitBinder
public void initBinder(WebDataBinder binder)
{
// LocalDateTime 类型转换
binder.registerCustomEditor(LocalDateTime.class, new PropertyEditorSupport()
{
@Override
public void setAsText(String text)
{
if(!StringUtils.isEmpty(text)){
setValue(LocalDateTime.parse(text, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
}
}
});
}
}
三、设置项目全局的出参格式化
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
private static final String dateTimeFormat = "yyyy-MM-dd HH:mm:ss";
private static final String dateFormat = "yyyy-MM-dd";
/**
*@Bean注解 注入到spring中,有spring管理
* @Bean <bean id="xxx"></bean>
* @return
*/
@Bean
public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
return builder -> {
builder.simpleDateFormat(dateTimeFormat);
builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(dateTimeFormat)));
builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(dateFormat)));
};
}
}