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

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

一、默认国际化参校验:

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、启动后英文请求:

 

中文:

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot 中,可以使用 Hibernate Validator 来进行请求参数校验。具体步骤如下: 1. 引入 Hibernate Validator 依赖: ```xml <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.1.5.Final</version> </dependency> ``` 2. 在需要校验的请求参数实体类中添加校验注解,例如: ```java public class User { @NotBlank(message = "用户名不能为空") private String username; @NotBlank(message = "密码不能为空") private String password; @Email(message = "邮箱格式不正确") private String email; // 省略 getter 和 setter 方法 } ``` 3. 在请求处理方法中添加 @Validated 注解,并在参数上添加 @Valid 注解,例如: ```java @RestController @RequestMapping("/user") @Validated public class UserController { @PostMapping("/login") public Result login(@RequestBody @Valid User user) { // 处理登录逻辑 } } ``` 4. 当请求参数不符合校验规则时,会抛出 ConstraintViolationException 异常。可以在全局异常处理器中对该异常进行处理,例如: ```java @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(ConstraintViolationException.class) public Result handleConstraintViolationException(ConstraintViolationException e) { List<String> errorMessages = e.getConstraintViolations().stream() .map(ConstraintViolation::getMessage) .collect(Collectors.toList()); return Result.error(String.join(",", errorMessages)); } } ``` 这样就可以自定义请求参数校验了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

寅灯

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

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

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

打赏作者

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

抵扣说明:

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

余额充值