SpringBoot 国际化配置参数校验请求头传参(二)

本文详细讲解了如何在SpringBoot应用中实现默认国际化参数校验,包括使用全局异常处理和`@ExceptionHandler`处理`MethodArgumentNotValidException`,以及如何切换请求语言。接着介绍了自定义国际化配置,涉及创建多语言properties文件、YML配置和定制WebMvcConfigurationSupport。最后展示了不同语言请求的示例,包括中文和英文。

承接上一篇文章,继续进行:

一、默认国际化参校验:

1、VO,控制层的接口不变

 2、全局异常处理:

 
@Slf4j
@RestControllerAdvice
@Order(Ordered.HIGHEST_PRECEDENCE)
public class AppExceptionHandler {

    @Autowired
    MessageSource messageSource;

    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public Object methodArgumentNotValid(HttpServletRequest req, MethodArgumentNotValidException  ex)  {

       // Request r= new Request();源码所示
        //ResultBean result = ResultBean.FAIL;
        ResponseDTO result = new ResponseDTO();
        FieldError fe = ex.getBindingResult().getFieldError();
        String msg = fe.getDefaultMessage();
        Locale locale = LocaleContextHolder.getLocale();
       // LocaleContextHolder.setLocale(Locale.ENGLISH);
        LocaleContextHolder.setLocale(Locale.US);
        locale = LocaleContextHolder.getLocale();
        String message = messageSource.getMessage(fe, LocaleContextHolder.getLocale());
        //String message = messageSource.getMessage(fe, Locale.ENGLISH);
        log.info("---MethodArgumentNotValidException Handler--- ERROR: {}",msg);
        result.setResultMsg(msg);
     //   List<ObjectError> errors =ex.getBindingResult().getAllErrors();
     //   StringBuffer errorMsg=new StringBuffer();
     //   errors.stream().forEach(x -> errorMsg.append(x.getDefaultMessage()).append(";"));
     //   log.error("---MethodArgumentNotValidException Handler--- ERROR: {}", errorMsg.toString());
    //    result.setResultMsg(errorMsg.toString());

        return result;
    }
}

3、启动服务后传参:accept-language:zh-CN/en

3.1、中文请求:http://localhost:8080/api/validate2

3.2、英文请求:

 

 二、自定义国际化参数校验:

1、VO更改:控制层接口不变、全局异常类不变

2、创建 三个properties配置文件并加上相应的配置:

 

 

3、yml配置:

spring:
    thymeleaf:
        encoding=UTF-8
        content-type=text/html
        cache=false
        mode=LEGACYHTML5
    messages:
        encoding: UTF-8
        cache-seconds: 1
        basename: static/i18n/messages

4、实现springBOOT 校验类 WebMvcConfigurationSupport

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;


/**
 * @author wanghuainan
 * @date 2021/10/13
 * 在URL后面加参数,并且使用默认国际化校验时不需要此类 (如果自定义国际化配置文件一定需要此类)?lang=zh_CN/?lang=zh_US;
 * 如果后端通过请求头接参数:accept-language:zh-CN/en ,则需要调此类,如果不加此类报错:"resultMsg": "{demo.key.null}"(使用默认国际化校验时不需要此类);即上下可能是互斥的
 */
@Configuration
public class ValidatorConfiguration extends WebMvcConfigurationSupport {
    @Autowired
    private MessageSource messageSource;

    @Override
    public Validator getValidator() {
        return validator();
    }

    @Bean
    public Validator validator() {
        LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
        validator.setValidationMessageSource(messageSource);
        return validator;
    }
}

5、启动后英文请求:

 

中文:

 到此,请求头传标识分享完毕,下篇分享业务异常获取自定义国际化配置,敬请期待!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寅灯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值