承接上一篇文章,继续进行:
一、默认国际化参校验:
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、启动后英文请求:
中文:
到此,请求头传标识分享完毕,下篇分享业务异常获取自定义国际化配置,敬请期待!