【SpringBoot专题】参数校验国际化之validator

【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,谢谢

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值