【SpringBoot专题】参数校验国际化之validator
开发过程中,参数校验必不可少,当然校验的方式有很多,之前用过缺少哪个参数,直接抛异常,然后交给全局异常处理器给出,这样的方式可能让这些校验代码掺杂在一起,不利于维护,基于注解的方式读取配置文件,还能国际化,笔者觉得这样更加优雅,提高代码的可维护性,话不多说,talk is cheap, show me your code
首先需要配置validator
/**
* MessageSource
*/
@Resource
private MessageSource messageSource;
/**
* Validation message i18n
* @return Validator
*/
@NotNull
@Bean
public Validator getValidator() {
LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
validator.setValidationMessageSource(this.messageSource);
return validator;
}
在resources目录下建立ValidationMessages这个文件夹,分别有en_US和zh_CN结尾的两个配置文件。
进行国际化配置,创建LocaleConfig
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class LocaleConfig implements WebMvcConfigurer {
@Bean
public LocaleResolver localeResolver() {
CookieLocaleResolver slr = new CookieLocaleResolver();
// 默认语言
slr.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);
return slr;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
// 参数名
lci.setParamName("lang");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}
创建参数接口类User
@Data
public class User {
@Size(min = 1, max = 10, message = "姓名长度必须为1到10")
@NotEmpty(message = "{user.name.notBlank}")
private String name;
}
创建业务接口,注意controller需要加上@Validated注解,标注当前controller需要检测。
/**
* http://localhost:8888/exception/validate2?lang=en_US
* http://localhost:8888/exception/validate2?lang=zh_CN
* @param user
* @return
*/
@PostMapping("/validate2")
@ResponseBody
public String validate2(@Valid
@RequestBody User user) {
return "validate1";
}
测试结果
github:如果觉得写得好的,可以给个star,谢谢