SpringBoot使用@Valid注解失效,最终找到罪魁祸首并解决
一、前言
SpringBoot使用@Valid校验参数失效,一开始是正常的,看了很久代码才发现了原因,不是网上说的pom导包的问题。
二、经过
加了相关校验注解,就是不生效,然后想起之前加了一个web参数绑定器,把前端的日期字符转成LocalDateTime对象。
WebMvcConfig配置类
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
/**
* web参数绑定器
* @param requestMappingHandlerAdapter
*/
@Autowired
public void setWebBindingInitializer(RequestMappingHandlerAdapter requestMappingHandlerAdapter) {
requestMappingHandlerAdapter.setWebBindingInitializer(new CustomWebBindingInitializer());
}
就是*requestMappingHandlerAdapter.setWebBindingInitializer()*这一行代码,把默认的参数绑定器都给覆盖了,导致参数校验框架失效,去掉就正常了。
三、使用Converter转换LocalDateTime对象
Converter类
/**
* 字符转LocalDateTime对象
* @author zsq
* @date 2021/8/28 11:33
**/
public class DateTimeConverter implements Converter<String, LocalDateTime> {
private static DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@Override
public LocalDateTime convert(String dateStr) {
if (dateStr == null || dateStr.trim().equals("")) {
return null;
}
LocalDateTime parse = null;
if (dateStr != null && !"".equals(dateStr.trim())) {
try {
parse = LocalDateTime.parse(dateStr, dateFormatter);
} catch (Exception e) {
//使用默认的转换格式
parse = LocalDateTime.parse(dateStr);
}
}
return parse;
}
}
添加到WebMVC配置
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Override
protected void addFormatters(FormatterRegistry registry) {
super.addFormatters(registry);
//日期LocalDateTime转换
registry.addConverter(new DateTimeConverter());
}
四、完美解决
参数校验正常,日期也能正常转换。
版权声明:本文为qq_40826978原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。