spring boot 1.4默认使用 hibernate validator

spring boot 1.4默认使用 hibernate validator 5.2.4 Final实现校验功能。hibernate validator 5.2.4 Final是JSR 349 Bean Validation 1.1的具体实现。

 

How to disable Hibernate validation in a Spring Boot project

As [M. Deinum] mentioned in a comment on my original post, the solution is to set:

spring.jpa.properties.javax.persistence.validation.mode=none
In the application.properties file.

Additionally, this behaviour is described here (its easy to miss because no example is provided).

http://stackoverflow.com/questions/26764532/how-to-disable-hibernate-validation-in-a-spring-boot-project


一 初步使用
hibernate vilidator主要使用注解的方式对bean进行校验,初步的例子如下所示:

package com.query;
import javax.validation.constraints.Min;
import org.hibernate.validator.constraints.NotBlank;
public class Student {
//在需要校验的字段上指定约束条件
 @NotBlankprivate String name;@Min(3)private int age;@NotBlankprivate String classess;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getClassess() {return classess;}public void setClassess(String classess) {this.classess = classess;}}

 

然后在controller中可以这样调用,加上@Validated注解即可。

package com.controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import com.learn.validate.domain.Student;@RestController
public class ValidateController {@RequestMapping(value="testStudent")public void testStudent(@Validated Student student) {}
}
如果校验失败,默认会返回Spring boot 框架的出错信息。是一个json串,里面有详细的出错描述。

二 使用gruops 属性来实现区别不同的校验需求
在上面的例子中,如果Student bean想要用于两个不同的请求中,每个请求有不同的校验需求,例如一个请求只需要校验name字段,一个请求需要校验name和age两个字段,那该怎么做呢?
使用注解的groups属性可以很好的解决这个问题,如下所示:

package com.query;
import javax.validation.constraints.Min;import org.hibernate.validator.constraints.NotBlank;public class Student {//使用groups属性来给分组命名,然后在需要的地方指定命令即可@NotBlank(groups=NAME.class)private String name;@Min(value=3,groups=AGE.class)private int age;@NotBlankprivate String classess;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getClassess() {return classess;}public void setClassess(String classess) {this.classess = classess;}public interface NAME{};public interface AGE{};}

 

根据需要在@Validated属性中指定需要校验的分组名,可以指定1到多个。指定到的分组名会全部进行校验,不指定的不校验。

package com.controller;import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import com.learn.validate.domain.Student;
import com.learn.validate.domain.Student.AGE;
import com.learn.validate.domain.Student.NAME;@RestController
public class ValidateController {@RequestMapping(value="testStudent")public void testStudent(@Validated Student student) {}@RequestMapping(value="testStudent1")public void testStudent1(@Validated(NAME.class) Student student) {}@RequestMapping(value="testStudent2")public void testStudent2(@Validated({NAME.class,AGE.class}) Student student) {}
}

三 使用 @ScriptAssert 注解校验复杂的业务逻辑
如果需要校验的业务逻辑比较复杂,简单的@NotBlank,@Min注解已经无法满足需求了,这时可以使用@ScriptAssert来指定进行校验的方法,通过方法来进行复杂业务逻辑的校验,然后返回 true或false来表明是否校验成功。
例如下面的例子:

package com.query;
import javax.validation.constraints.Min;import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.ScriptAssert;import com.learn.validate.domain.Student.CHECK;
//通过script 属性指定进行校验的方法,传递校验的参数,
//依然可以通过groups属性指定分组名称
@ScriptAssert(lang="javascript",script="com.learn.validate.domain
.Student.checkParams(_this.name,_this.age,_this.classes)",
groups=CHECK.class)
public class Student {@NotBlank(groups=NAME.class)private String name;@Min(value=3,groups=AGE.class)private int age;@NotBlankprivate String classess;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getClassess() {return classess;}public void setClassess(String classess) {this.classess = classess;}public interface NAME{};public interface AGE{};public interface CHECK{};//注意进行校验的方法要写成静态方法,否则会出现 //TypeError: xxx is not a function 的错误public static boolean checkParams(String name,int age,String classes) {if(name!=null&&age>8&classes!=null){return true;}else{return false;}}}
在需要的地方,通过分组名称进行调用
package com.controller;import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import com.learn.validate.domain.Student;
import com.learn.validate.domain.Student.CHECK;@RestController
public class ValidateController {@RequestMapping(value="testStudent3")public void testStudent3(@Validated(CHECK.class) Student student) {}
}

 

原文链接:http://www.jianshu.com/p/a9b1e2f7a749
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
import java.util.Set;import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;public class JavaxValidation {public static void main(String[] args) {Dog d = new Dog();d.setName("小明");d.setAge(2);ValidatorFactory vf = Validation.buildDefaultValidatorFactory();Validator validator = vf.getValidator();Set<ConstraintViolation<Dog>> set = validator.validate(d);for (ConstraintViolation<Dog> constraintViolation : set) {System.out.println(constraintViolation.getMessage());}}
}class Dog {@NotNull(message = "不能为空")private String name;@Min(value = 1, message = "最少为1")@Max(value = 20, message = "最大为20")private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

https://my.oschina.net/p2ng/blog/336690

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542265.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python mpi开销_GitHub - hustpython/MPIK-Means

并行计算的K-Means聚类算法实现一&#xff0c;实验介绍聚类是拥有相同属性的对象或记录的集合&#xff0c;属于无监督学习&#xff0c;K-Means聚类算法是其中较为简单的聚类算法之一&#xff0c;具有易理解&#xff0c;运算深度块的特点.1.1 实验内容通过本次课程我们将使用C语…

服务器修改开机启动项,启动项设置_服务器开机启动项

最近很多观众老爷在苦觅关于启动项设置的解答&#xff0c;今天钦编为大家综合5条解答来给大家解开疑惑&#xff01; 有98%玩家认为启动项设置_服务器开机启动项值得一读&#xff01;启动项设置1.如何在bios设置硬盘为第一启动项详细步骤根据BIOS分类的不同操作不同&#xff1a;…

字符串查找字符出现次数_查找字符串作为子序列出现的次数

字符串查找字符出现次数Description: 描述&#xff1a; Its a popular interview question based of dynamic programming which has been already featured in Accolite, Amazon. 这是一个流行的基于动态编程的面试问题&#xff0c;已经在亚马逊的Accolite中得到了体现。 Pr…

Ubuntu 忘记密码的处理方法

Ubuntu系统启动时选择recovery mode&#xff0c;也就是恢复模式。接着选择Drop to root shell prompt ,也就是获取root权限。输入命令查看用户名 cat /etc/shadow &#xff0c;$号前面的是用户名输入命令&#xff1a;passwd "用户名" 回车就可以输入新密码了转载于:…

服务器mdl文件转换,Simulink Project 中 MDL 到 SLX 模型文件格式的转换

打开弹体示例项目并将 MDL 文件另存为 SLX运行以下命令以创建并打开“sldemo_slproject_airframe”示例的工作副本。Simulink.ModelManagement.Project.projectDemo(airframe, svn);rebuild_s_functions(no_progress_dialog);Creating sandbox for project.Created example fil…

vue 修改div宽度_Vue 组件通信方式及其应用场景总结(1.5W字)

前言相信实际项目中用过vue的同学&#xff0c;一定对vue中父子组件之间的通信并不陌生&#xff0c;vue中采用良好的数据通讯方式&#xff0c;避免组件通信带来的困扰。今天笔者和大家一起分享vue父子组件之间的通信方式&#xff0c;优缺点&#xff0c;及其实际工作中的应用场景…

Java System类identityHashCode()方法及示例

系统类identityHashCode()方法 (System class identityHashCode() method) identityHashCode() method is available in java.lang package. identityHashCode()方法在java.lang包中可用。 identityHashCode() method is used to return the hashcode of the given object – B…

Linux中SysRq的使用(魔术键)

转&#xff1a;http://www.chinaunix.net/old_jh/4/902287.html 魔术键&#xff1a;Linux Magic System Request Key Hacks 当Linux 系统不能正常响应用户请求时, 可以使用SysRq小工具控制Linux. 一 SysRq的启用与关闭 要想启用SysRq, 需要在配置内核时设置Magic SysRq key (CO…

链接服务器访问接口返回了消息没有活动事务,因为链接服务器 SQLEHR 的 OLE DB 访问接口 SQLNCLI10 无法启动分布式事务。...

查看一下MSDTC啟動是否正確1、运行 regedt32&#xff0c;浏览至 HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC。添加一个 DWORD 值 TurnOffRpcSecurity&#xff0c;值数据为 1。2、重启MS DTC服务。3、打开“管理工具”的“组件服务”。a. 浏览至"启动管理工具"。b.…

micropython 蜂鸣器_基于MicroPython的TPYBoard微信远程可燃气体报警器的设计与实现...

前言在我们平时的生活中&#xff0c;经常看到因气体泄漏发生爆炸事故的新闻。房屋起火、人体中毒等此类的新闻报道层出不穷。这种情况下&#xff0c;人民就发明了可燃气体报警器。当工业环境、日常生活环境(如使用天然气的厨房)中可燃性气体发生泄露&#xff0c;可燃气体报警器…

Java PropertyPermission getActions()方法与示例

PropertyPermission类的getActions()方法 (PropertyPermission Class getActions() method) getActions() method is available in java.util package. getActions()方法在java.util包中可用。 getActions() method is used to get the list of current actions in the form of…

源码安装nginx以及平滑升级

源码安装nginx以及平滑升级作者&#xff1a;尹正杰版权声明&#xff1a;原创作品&#xff0c;谢绝转载&#xff01;否则将追究法律责任。欢迎加入&#xff1a;高级运维工程师之路 598432640这个博客不方便上传软件包&#xff0c;我给大家把软件包放到百度云链接&#xff1a;htt…

ajax 跨站返回值,jquery ajax 跨域问题

补充回答&#xff1a;你的动态页只是一个请求页。例如你新建一个 get.asp 页面&#xff0c;用以下代码&#xff0c;在服务端实现像URL异步(ajax)请求&#xff0c;将请求结果输出。客户端页面再次用ajax(JS或者jquery的)向get.asp请求数据。两次ajax完成异域数据请求。get.asp代…

Bootstrap学习笔记系列1-------Bootstrap网格系统

目录 Bootstrap网格系统 学习笔记简单网格偏移列嵌套列列排序Bootstrap网格系统 学习笔记 简单网格 先上代码再解释 <!DOCTYPE html> <html><head><title>Bootstrap 模板</title><meta charset"utf-8"><!-- 引入 Bootstrap -…

Java类类的getDeclaringClass()方法和示例

类的类getDeclaringClass()方法 (Class class getDeclaringClass() method) getDeclaringClass() method is available in java.lang package. getDeclaringClass()方法在java.lang包中可用。 getDeclaringClass() method is used to return the declared Class object denotin…

乐高泰坦机器人视频解说_“安防”机器人将亮相服贸会

可巡视园区、自动避障、自动充电&#xff0c;实现24小时巡逻&#xff0c;与后台链接实时视频监控&#xff0c;异常检测……17日下午&#xff0c;北青-北京头条记者在特斯联科技集团有限公司的展厅中看到&#xff0c;一款“身怀绝技”的“安防”机器人备受关注。这款机器人也将在…

ios上传文件云服务器上,ios文件上传服务器

ios文件上传服务器 内容精选换一换在当前的迁移流程中&#xff0c;可能会存在迁移后ECS控制台镜像名称与实际操作系统不一致的现象。在当前机制下&#xff0c;该现象属于正常现象。该处显示的是下发ECS时使用的镜像名称&#xff0c;而不是操作系统名称。如果设置目的端时使用的…

这是一个UIImage集合类,可以很方便的对图片的染料(着色),增加亮度(闪电)和降低亮度(黑)和其他扩展的功能模块。...

2019独角兽企业重金招聘Python工程师标准>>> 这是一个UIImage集合类&#xff0c;可以很方便的对图片的染料&#xff08;着色&#xff09;&#xff0c;增加亮度&#xff08;闪电&#xff09;和降低亮度&#xff08;黑&#xff09;和其他扩展的功能模块。 在swift下实…

python爬取酷狗音乐top500_python获取酷狗音乐top500的下载地址 MP3格式

下面先给大家介绍下python获取酷狗音乐top500的下载地址 MP3格式&#xff0c;具体代码如下所示&#xff1a;# -*- coding: utf-8 -*-# Time : 2018/4/16# File : kugou_top500.py# Software: PyCharm# pyVer : python 2.7import requests,jsonheaders{UserAgent : Mozilla/5.0 …

微商相册一直显示服务器偷懒,【小程序】微商个人相册多端小程序源码以及安装...

程序介绍学习node.js顺便接的400元单子&#xff0c;前后端都是自己写&#xff0c;相比自己以前写的&#xff0c;这次相对来说比较规范&#xff0c;用于个人相册展示&#xff0c;适合微商&#xff0c;有客服联系&#xff0c;无需后台管理系统&#xff0c;小程序上直接进行管理&a…