1. springboot 默认集成了 hibernate-validator,它默认是生效的,可以直接使用。

比如:

@RestController
@RequestMapping("/hibernate")
public class DefaultHibernateValidatorTestController { /**
* Springboot 默认会验证 controller 层的 validator,使用的是默认实现 hibernate-validator。
* 但是 hibernate-validator 只能对Object类型的属性进行校验,不能对单个的参数进行校验。下面的校验不生效
* @param str
* @return
*/
@RequestMapping("/string")
public OpResponse valiateString(@NotEmpty(message = "str不能为空") String str){
return OpResponse.suc(str);
} /**
* 检验生效
* @param foo
* @return
*/
@RequestMapping("/foo")
public OpResponse valiateString(@Valid @NotNull Foo foo){
return OpResponse.suc(foo);
} static class Foo implements Serializable {
@NotNull
private Integer id;
@NotEmpty
private String name;
........
}
}

2. hibernate-validator不支持基础类型的验证,springboot对其进行了扩展,添加了MethodValidationPostProcessor拦截器,可以实现对方法参数的校验。

例如:

/**
* 对基础类型的验证,必须要在Controller类上加 @Validated,同时配置 MethodValidationPostProcessor 才生效
* <pre>
* @Bean
* public MethodValidationPostProcessor methodValidationPostProcessor() {
* return new MethodValidationPostProcessor();
* }
* </pre>
* @link https://yezhwi.github.io/springboot/2017/11/17/SpringBoot-服务端参数验证-JSR-303验证框架
* Created by wangzhiyuan on 2018/8/20
*/
@RestController
@RequestMapping("/validate")
@Validated
public class ValidatorTestController {
@Resource
BizService bizService; @RequestMapping("/string") // 这个 @NotEmpty 是生效的
public OpResponse valiateString(@NotEmpty(message = "str不能为空") String str){
bizService.validateTest(str);
return OpResponse.suc(str);
} /**
* 可以看出,springboot默认只会验证 controller 方法上的 validator 注解,而不会验证 controller 层以外的。所以,如果要在其他层使用 validator 验证的话,需要单独配置拦截器
* @return
*/
@RequestMapping("/blank")
public OpResponse blank(){
String str = null;
bizService.validateTest(str);
bizService.validateFooTest(null);
return OpResponse.suc(str);
} }

3. springboot默认只会验证 controller 方法上的 validator 注解,而不会验证 controller 层以外的。所以,如果要在其他层使用 validator 验证的话,需要单独配置拦截器

SpringBoot-服务端参数验证-JSR-303验证框架的更多相关文章

  1. JSR-303 Bean Validation 介绍及 Spring MVC 服务端参数验证最佳实践

    任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用很多时候同样的数据验证逻辑会出现在不同的层,这样 ...

  2. springboot 服务端获取前端传过来的参数7种方式

    下面为7种服务端获取前端传过来的参数的方法  1.直接把表单的参数写在Controller相应的方法的形参中,适用于GET 和 POST请求方式 这种方式不会校验请求里是否带参数,即下面的userna ...

  3. Spring Boot2 系列教程 (十五) | 服务端参数校验之一

    估计很多朋友都认为参数校验是客户端的职责,不关服务端的事.其实这是错误的,学过 Web 安全的都知道,客户端的验证只是第一道关卡.它的参数验证并不是安全的,一旦被有心人抓到可乘之机,他就可以有各种方法 ...

  4. Java web服务端参数校验Javax.validation (springboot)

    一.基本使用 Javax.validation是spring集成自带的一个参数校验接口.可通过添加注解来设置校验条件. 下面以springboot项目为例进行说明.创建web项目后,不需要再添加其他的 ...

  5. 【使用篇二】SpringBoot服务端数据校验(8)

    对于任何一个应用而言,客户端做的数据有效性验证都不是安全有效的,而数据验证又是一个企业级项目架构上最为基础的功能模块,这时候就要求我们在服务端接收到数据的时候也对数据的有效性进行验证.为什么这么说呢? ...

  6. springboot+spring security +oauth2.0 demo搭建(password模式)(认证授权端与资源服务端分离的形式)

    项目security_simple(认证授权项目) 1.新建springboot项目 这儿选择springboot版本我选择的是2.0.6 点击finish后完成项目的创建 2.引入maven依赖  ...

  7. CAS 5.1.x 的搭建和使用(一)—— 通过Overlay搭建服务端

    CAS单点登录系列: CAS 5.1.x 的搭建和使用(一)—— 通过Overlay搭建服务端 CAS5.1.x 的搭建和使用(二)—— 通过Overlay搭建服务端-其它配置说明 CAS5.1.x ...

  8. TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析

    TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各 ...

  9. 二、网络编程-socket之TCP协议开发客户端和服务端通信

    知识点:之前讲的udp协议传输数据是不安全的,不可靠不稳定的,tcp协议传输数据安全可靠,因为它们的通讯机制是不一样的.udp是用户数据报传输,也就是直接丢一个数据包给另外一个程序,就好比寄信给别人, ...

  10. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

随机推荐

  1. Oozie分布式工作流——流控制

    最近又开始捅咕上oozie了,所以回头还是翻译一下oozie的文档.文档里面最重要就属这一章了--工作流定义. 一提到工作流,首先想到的应该是工作流都支持哪些工作依赖关系,比如串式的执行,或者一对多, ...

  2. 一道面试题 包含了new的细节 和运算符的优先级 还有属性访问机制

    function Foo() { getName = function () { alert(1); } return this; } Foo.getName = function () { aler ...

  3. Hessian学习总结(二)——使用hessian上传文件

    hessian较早版本通过 byte[] 进行文件传输:4.0之后支持 InputStream 作为参数或返回值进行传输. 注意:hessian会读取整个文件,如果文件过大,会导致JVM内存溢出.可以 ...

  4. CentOS安装mysql*.rpm提示conflicts with file from package的解决办法

    看到“conflicts”,是产生冲突了,文件“/usr/share/mysql/charsets/*”需要MySQL-server-5.6.19-1.linux_glibc2.5.x86_64版本的 ...

  5. jquery异步ajax与服务器通信过程中如何通过then方法链式传递多层数据

    我们在有些地方可能需要对服务器返回的参数做多步处理,或者很多复杂的操作必须等到服务器返回结果之后才会执行,那么我们可以用链式调用的then方法让这里做到更加易于扩展,也更加容易分离出各个功能模块.基本 ...

  6. CSS全局居中

    可见区域 垂直居中 top:$(document).scrollTop() + ($(document).height() - $(document).scrollTop())/2,

  7. cygwin下切换到其他磁盘

    转自:https://blog.csdn.net/lts_cxl/article/details/17248727 cygwin安装之后,无法直接访问e,c,d等盘的目录.  运行df -h 命令,发 ...

  8. hustoj升级

     sudo su  svn up hustoj-read-only cd hustoj-read-only cd core sudo ./make.sh 有冲突 全部回答r http://www.hu ...

  9. vim 正则替换功能

    最近使用vim的正则替换功能,非常强大 一个文件: ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, 现在需要删除逗号前面的内容,那么在vim敲入命令: :%s/.*,//g 得到的结果是: ...

  10. Spark机器学习(6):决策树算法

    1. 决策树基本知识 决策树就是通过一系列规则对数据进行分类的一种算法,可以分为分类树和回归树两类,分类树处理离散变量的,回归树是处理连续变量. 样本一般都有很多个特征,有的特征对分类起很大的作用,有 ...