springboot 配置 Validator 校验框架国际化 支持快速返回
1、国际化资源
使用IDEA创建资源组
2、编写配置
application.yml
增加国际化目录配置
增加国际化配置类 从请求头获取多语言关键字
/*** 国际化配置** @author Lion Li*/
@Configuration
public class I18nConfig {@Beanpublic LocaleResolver localeResolver() {return new I18nLocaleResolver();}/*** 获取请求头国际化信息*/static class I18nLocaleResolver implements LocaleResolver {@NotNull@Overridepublic Locale resolveLocale(HttpServletRequest httpServletRequest) {String language = httpServletRequest.getHeader("content-language");Locale locale = Locale.getDefault();if (StrUtil.isNotBlank(language)) {String[] split = language.split("_");locale = new Locale(split[0], split[1]);}return locale;}@Overridepublic void setLocale(@NotNull HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {}}
}
3、用法详解
在 Header 请求头 增加上下文语言参数 content-language
参数需与国际化配置文件后缀对应
如 zh_CN en_US 等
4、测试获取 code
对应国际化内容
编写测试类
/*** 测试国际化** @author Lion Li*/
@RestController
@RequestMapping("/demo/i18n")
public class TestI18nController {@Autowiredprivate MessageSource messageSource;/*** 通过code获取国际化内容* code为 messages.properties 中的 key** 测试使用 user.register.success*/@GetMapping()public String get(String code) {return messageSource.getMessage(code, new Object[]{}, LocaleContextHolder.getLocale());}
}
测试接口
5.配置 Validator 校验 国际化
增加 validation 自动装配依赖
<!-- 自定义验证注解 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>
编写 validation 配置类
/*** 校验框架配置类** @author Lion Li*/
@Configuration
public class ValidatorConfig {@Autowiredprivate MessageSource messageSource;/*** 配置校验框架 快速返回模式*/@Beanpublic Validator validator() {LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean();// 设置上方配置的国际化源factoryBean.setValidationMessageSource(messageSource);// 设置使用 HibernateValidator 校验器factoryBean.setProviderClass(HibernateValidator.class);Properties properties = new Properties();// 设置 快速异常返回properties.setProperty("hibernate.validator.fail_fast", "true");factoryBean.setValidationProperties(properties);// 加载配置factoryBean.afterPropertiesSet();return factoryBean.getValidator();}}
编写全局异常处理 将所有的相关异常都进行拦截处理
/*** 自定义验证异常*/@ExceptionHandler(BindException.class)public AjaxResult<Void> handleBindException(BindException e) {log.error(e.getMessage(), e);String message = e.getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining(", "));return AjaxResult.error(message);}/*** 自定义验证异常*/@ExceptionHandler(ConstraintViolationException.class)public AjaxResult<Void> constraintViolationException(ConstraintViolationException e) {log.error(e.getMessage(), e);String message = e.getConstraintViolations().stream().map(ConstraintViolation::getMessage).collect(Collectors.joining(", "));return AjaxResult.error(message);}/*** 自定义验证异常*/@ExceptionHandler(MethodArgumentNotValidException.class)public AjaxResult<Void> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {log.error(e.getMessage(), e);String message = e.getBindingResult().getFieldError().getDefaultMessage();return AjaxResult.error(message);}
编写测试类
/*** 测试国际化** @author Lion Li*/
@Validated
@Api(value = "测试国际化控制器", tags = {"测试国际化管理"})
@RestController
@RequestMapping("/demo/i18n")
public class TestI18nController {/*** Validator 校验国际化* 不传值 分别查看异常返回** 测试使用 not.null*/@ApiOperation("Validator 校验国际化")@GetMapping("/test1")public AjaxResult<Void> test1(@NotBlank(message = "{not.null}") String str) {return AjaxResult.success(str);}/*** Bean 校验国际化* 不传值 分别查看异常返回** 测试使用 not.null*/@ApiOperation("Bean 校验国际化")@GetMapping("/test2")public AjaxResult<TestI18nBo> test2(@Validated TestI18nBo bo) {return AjaxResult.success(bo);}@Datapublic static class TestI18nBo {@NotBlank(message = "{not.null}")private String name;@NotNull(message = "{not.null}")@Range(min = 0, max = 100, message = "{length.not.valid}")private Integer age;}
}
使用 Validator
框架校验 controller
参数返回国际化
controller
校验接口参数 需要在类增加 @Validated
注解
参数对应校验注解 使用 {code}
形式标注使用国际化处理
使用 Validator
框架校验 Bean
返回国际化
Bean
校验需要在接口校验 Bean
参数使用 @Validated
注解
Bean
内属性校验注解 使用 {code}
形式标注使用国际化处理
springboot 配置 Validator 校验框架国际化 支持快速返回相关推荐
- Springboot Bean Validation校验框架
我们的校验框架通常用于DTO层,用户从前端通过Json串传入值,后端对传入的Json封装到DTO层中,我们对DTO层的元素进行校验,比如邮箱,手机号等等. 首先需要引入bean校验需要的jar包: & ...
- SpringBoot使用validator校验
在前台表单验证的时候,通常会校验一些数据的可行性,比如是否为空,长度,身份证,邮箱等等,那么这样是否是安全的呢,答案是否定的.因为也可以通过模拟前台请求等工具来直接提交到后台,比如postman这样的 ...
- SpringBoot的参数校验器 - Validator
1.前提 在日常的开发中,服务端对象的校验是非常重要的一个环节,比如注册的时候:校验用户名,密码,身份证,邮箱等信息是否为空,以及格式是否正确. 但是这种在日常的开发中进行校验太繁琐了,代码繁琐而且很 ...
- springBoot国际化多语言开发配置,中文OR英文支持一键切换
springBoot有许多的自动化配置,其中就包括多语言的autoConfiguration,打开org.springframework.boot.autoconfigure.context.Mess ...
- SpringBoot中使用Hibernate Validator校验工具类
1.说明 在Spring Boot已经集成Hibernate Validator校验器的情况下, 对于配置了校验注解的请求参数, 框架会自动校验其参数, 但是如果想手动校验一个加了注解的普通对象, 比 ...
- qt linux 国际化,多语言,配置CLion管理Qt项目国际化支持
随着Qt 6的发布,cmake也正式宣告接管qmake的工作了. 在之前的一篇博客里我介绍了如何使用cmake管理你的qt项目,不过有一点我没有讲,那就是对国际化(i18n)的处理. 今天我们就来介绍 ...
- springboot使用hibernate validator校验
回到顶部 一.参数校验 在开发中经常需要写一些字段校验的代码,比如字段非空,字段长度限制,邮箱格式验证等等,写这些与业务逻辑关系不大的代码个人感觉有两个麻烦: 验证代码繁琐,重复劳动 方法内代码显得冗 ...
- osgi怎么配置访问html,Springboot Application 集成 OSGI 框架开发(示例代码)
内容来源:https://www.ibm.com/developerworks/cn/java/j-springboot-application-integrated-osgi-framework-d ...
- springboot使用validator进行参数校验
前言 公司项目是前后端分离的,为了保证前端传输数据的合法性,对参数进行校验就很有必要.hibernate-validator就是一个不错的参数校验的解决方法.spring-boot-starter-w ...
最新文章
- 【Java】监听jframe窗口大小改变函数:addComponentListener
- 疯狂ios讲义之网页控件(UIWebView)
- CentOS 6.5 安装与配置LAMP
- 怎么做蒙特卡洛计算npv_计算机一级:这该死的“进制转换”,这种题到底怎么做?...
- [转]用g++编译动态链接库
- 【C】Natasha 插件编程
- 【2016年第6期】俄罗斯跨境数据流动立法规则与执法实践
- Silverlight 3 学习概要
- 沉浸式状态栏的简易实现
- 《菜菜的机器学习sklearn课堂》sklearn入门与决策树
- 互联网Internet体系结构以及网关协议OSPF
- 【水果蔬菜识别】基于matlab GUI形态学水果蔬菜识别【含Matlab源码 919期】
- PMP备考|通关宝典
- Windows XP SP3 下 High Definition Audio 声卡安装方法
- xml的三种解析方法
- 计算机软考网络工程师证书,软考网络工程师证书有效期是多久?
- [投资笔记]2016-11-25日
- api 接口简单调用
- 学习绘画应该怎么起步?
- 利用卷积神经网络实现手写字识别