罪魁祸首并解决"/>
SpringBoot使用@Valid注解失效,最终找到罪魁祸首并解决
一、前言
SpringBoot使用@Valid校验参数失效,一开始是正常的,看了很久代码才发现了原因,不是网上说的pom导包的问题。
二、经过
加了相关校验注解,就是不生效,然后想起之前加了一个web参数绑定器,把前端的日期字符转成LocalDateTime对象。
WebMvcConfig配置类
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {/*** web参数绑定器* @param requestMappingHandlerAdapter*/@Autowiredpublic 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");@Overridepublic 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 {@Overrideprotected void addFormatters(FormatterRegistry registry) {super.addFormatters(registry);//日期LocalDateTime转换registry.addConverter(new DateTimeConverter());}
四、完美解决
参数校验正常,日期也能正常转换。
更多推荐
SpringBoot使用@Valid注解失效,最终找到罪魁祸首并解决
发布评论