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 校验框架国际化 支持快速返回相关推荐

  1. Springboot Bean Validation校验框架

    我们的校验框架通常用于DTO层,用户从前端通过Json串传入值,后端对传入的Json封装到DTO层中,我们对DTO层的元素进行校验,比如邮箱,手机号等等. 首先需要引入bean校验需要的jar包: & ...

  2. SpringBoot使用validator校验

    在前台表单验证的时候,通常会校验一些数据的可行性,比如是否为空,长度,身份证,邮箱等等,那么这样是否是安全的呢,答案是否定的.因为也可以通过模拟前台请求等工具来直接提交到后台,比如postman这样的 ...

  3. SpringBoot的参数校验器 - Validator

    1.前提 在日常的开发中,服务端对象的校验是非常重要的一个环节,比如注册的时候:校验用户名,密码,身份证,邮箱等信息是否为空,以及格式是否正确. 但是这种在日常的开发中进行校验太繁琐了,代码繁琐而且很 ...

  4. springBoot国际化多语言开发配置,中文OR英文支持一键切换

    springBoot有许多的自动化配置,其中就包括多语言的autoConfiguration,打开org.springframework.boot.autoconfigure.context.Mess ...

  5. SpringBoot中使用Hibernate Validator校验工具类

    1.说明 在Spring Boot已经集成Hibernate Validator校验器的情况下, 对于配置了校验注解的请求参数, 框架会自动校验其参数, 但是如果想手动校验一个加了注解的普通对象, 比 ...

  6. qt linux 国际化,多语言,配置CLion管理Qt项目国际化支持

    随着Qt 6的发布,cmake也正式宣告接管qmake的工作了. 在之前的一篇博客里我介绍了如何使用cmake管理你的qt项目,不过有一点我没有讲,那就是对国际化(i18n)的处理. 今天我们就来介绍 ...

  7. springboot使用hibernate validator校验

    回到顶部 一.参数校验 在开发中经常需要写一些字段校验的代码,比如字段非空,字段长度限制,邮箱格式验证等等,写这些与业务逻辑关系不大的代码个人感觉有两个麻烦: 验证代码繁琐,重复劳动 方法内代码显得冗 ...

  8. osgi怎么配置访问html,Springboot Application 集成 OSGI 框架开发(示例代码)

    内容来源:https://www.ibm.com/developerworks/cn/java/j-springboot-application-integrated-osgi-framework-d ...

  9. springboot使用validator进行参数校验

    前言 公司项目是前后端分离的,为了保证前端传输数据的合法性,对参数进行校验就很有必要.hibernate-validator就是一个不错的参数校验的解决方法.spring-boot-starter-w ...

最新文章

  1. 【Java】监听jframe窗口大小改变函数:addComponentListener
  2. 疯狂ios讲义之网页控件(UIWebView)
  3. CentOS 6.5 安装与配置LAMP
  4. 怎么做蒙特卡洛计算npv_计算机一级:这该死的“进制转换”,这种题到底怎么做?...
  5. [转]用g++编译动态链接库
  6. 【C】Natasha 插件编程
  7. 【2016年第6期】俄罗斯跨境数据流动立法规则与执法实践
  8. Silverlight 3 学习概要
  9. 沉浸式状态栏的简易实现
  10. 《菜菜的机器学习sklearn课堂》sklearn入门与决策树
  11. 互联网Internet体系结构以及网关协议OSPF
  12. 【水果蔬菜识别】基于matlab GUI形态学水果蔬菜识别【含Matlab源码 919期】
  13. PMP备考|通关宝典
  14. Windows XP SP3 下 High Definition Audio 声卡安装方法
  15. xml的三种解析方法
  16. 计算机软考网络工程师证书,软考网络工程师证书有效期是多久?
  17. [投资笔记]2016-11-25日
  18. api 接口简单调用
  19. 学习绘画应该怎么起步?
  20. 利用卷积神经网络实现手写字识别

热门文章

  1. Busybox命令详解
  2. 一种福利彩票辅助选号软件的开发
  3. 剪辑魔术——赞爆朋友圈的创意视频!
  4. Mybatis使用教程
  5. ArcCatalog和ArcSDE
  6. 导航栏地址中HTTPS是红色什么原因?
  7. 经典小游戏2048 代码教学
  8. layui数据表格增加序号列(第二页从1开始 or 接上一页序号开始)
  9. Star CCM+ 如何创建自己的物性参数数据库
  10. 定位java heap space_页面报OutofMemoryError:Java heap space问题定位及优化