SpringBoot2 @validated 自定义效验类型
项目参考:详细参见:《Spring Boot 2精髓:从构建小系统到架构分布式大系统》 第三章 3.5.3节 自定义校验
项目结构

WorkTime
package com.archibladwitwicke.springboot2.chapter03.validated; import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*; @Constraint(validatedBy = { WorkTimeValidated.class })
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD})
public @interface WorkTime {
String message() default "工作时间不能超过8小时!"; int max() default 8; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {};
}
WorkTimeValidated
package com.archibladwitwicke.springboot2.chapter03.validated; import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext; public class WorkTimeValidated implements ConstraintValidator<WorkTime, Integer> { private int max; @Override
public void initialize(WorkTime work) {
max = work.max();
} @Override
public boolean isValid(Integer value, ConstraintValidatorContext constraintValidatorContext) {
Boolean flag = false; if (value == null || value < max) {
flag = true;
} return flag;
}
}
UserValidated
package com.archibladwitwicke.springboot2.chapter03.pojo; import com.archibladwitwicke.springboot2.chapter03.validated.WorkTime; import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null; public class UserValidated { public interface Add {
} public interface Update {
} @NotNull(groups = Update.class)
@Null(groups = Add.class)
private Long id; @NotNull(message = "名字不能为空!")
private String name; @NotNull(message = "年龄不能为空!")
@Max(value = 100, message = "年龄不能大于100岁!")
private String age; @NotNull
@WorkTime(max = 5, message = "工作时间不能超过5小时!")
private Integer worktime; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
} public Integer getWorktime() {
return worktime;
} public void setWorktime(Integer worktime) {
this.worktime = worktime;
}
}
ValidateController
package com.archibladwitwicke.springboot2.chapter03.controller; import com.archibladwitwicke.springboot2.chapter03.pojo.UserValidated;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import java.util.List; @Controller
@RequestMapping("/validated")
public class ValidatedController { @RequestMapping("/validateuser")
@ResponseBody
public String validateUser(@Validated UserValidated userValidated, BindingResult bindingResult) {
String result = null; if (bindingResult.getErrorCount() == 0) {
result = "通过验证!";
} List<ObjectError> allErrors = bindingResult.getAllErrors();
for (ObjectError error : allErrors) {
String defaultMessage = error.getDefaultMessage();
System.out.println(defaultMessage);
} return result;
} @RequestMapping("/validateusergroup")
@ResponseBody
public String validateUserByGroup(@Validated UserValidated userValidated, BindingResult bindingResult) {
String result = null; if (bindingResult.getErrorCount() == 0) {
result = "通过验证!";
} List<ObjectError> allErrors = bindingResult.getAllErrors();
for (ObjectError error : allErrors) {
String defaultMessage = error.getDefaultMessage();
System.out.println(defaultMessage);
} return result;
}
}
SpringBoot2 @validated 自定义效验类型的更多相关文章
- 自定义委托类型 - .Net自带委托类型
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递. 与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用. 一.自定义委托类型 1.语法结构:访问修 ...
- C:Wordpress自定义文章类型(图视频)
自定义文章类型,包括: 1:单独的"文章内容模板" 2:单独的"文章列表模板" 3:单独的"控制后台"(文章分类.添加文章) 创建自定义文章 ...
- sharepoint2010问卷调查(3)-实现问卷的开始和结束时间(采用自定义字段类型)
接着上面的图片调查,sharepoint自带的问卷调查是没有开始和结束时间的.这个在项目过程不太实用.问卷一般有开始和结束时间的.因此需要自己 动手开发一个自定义字段类型字段.如下图: 开发添加栏目会 ...
- sharepoint2010问卷调查(2)-实现问卷的图片调查(采用自定义字段类型)
1. 首先建立个图片库上传图片 并建立文件夹1和2,1下有1.1文件夹,2下2.1文件夹,2.1下有文件夹2.1.1. 在1文件夹下放如下图片: 2.建立自定义字段类型,如下图: 3.部署后建立栏目的 ...
- Gradle学习系列之九——自定义Task类型
在本系列的上篇文章中,我们学习了多Project构建,在本篇文章中,我们将学到如何自定义Task类型. 请通过以下方式下载本系列文章的Github示例代码: git clone https://git ...
- Unity3D ShaderLab 创建自定义高光类型
Unity3D ShaderLab 创建自定义高光类型 在上一篇,我们认识了Unity基础的高光实现,本次主要是研究如何对Phong高光类型进行顶点操作,以及在表面着色器中使用Input结构体的新参数 ...
- [Other] 自定义MIME类型支持FLV的相关设置
刚测试知道为何服务器无法播放flv的原因,特此记录而已. 网络空间支持FLV的相关设置,就是自定义一个MIME类型,一般虚拟主机管理里面都有这个选项 自定义MIME类型 扩展名: .flv MIME类 ...
- SharePoint 2010 自定义 字段 类型--------省市区联动
转:http://www.cnblogs.com/sp007/p/3384310.html 最近有几个朋友问到了有关自定义字段类型的问题,为了让更多的人了解自定义字段类型的方法,特写一篇博客与大家分享 ...
- 自定义枚举类型的常用操作-附源码(xjl456852原创)
自定义枚举类型中,假如我们有name和desc这样的属性,并在这个基础上定义了多个对象. 那么就可能用到通过name获取desc,或者通过desc获取name.通过name或者desc获取对应的枚举对 ...
随机推荐
- 使用C#和Thrift来访问Hbase实例
今天试着用C#和Thrift来访问Hbase,主要参考了博客园上的这篇文章.查了Thrift,Hbase的资料,结合博客园的这篇文章,终于搞好了.期间经历了不少弯路,下面我尽量详细的记录下来,免得大家 ...
- centos 7安装cppman
cppman是一个在命令行查询c和c++语法及标准库函数的工具,非常好用,python3编写,记录一下安装过程: yum update yum install python34 yum install ...
- Atitit vue.js 把ajax数据 绑定到form表单
Atitit vue.js 把ajax数据 绑定到form表单 1.1. 使用场景:主要应用在编辑与提交场合..1 1.2. 绑定数据到form控件,可以使用jquery,不过vue.js更加简单1 ...
- IOS开发之UIScrollVIew运用
UIScrollView可以实现在一个界面看到所有内容,同时也不需要担心所显示的内容超出屏幕的大小,当超出之后可以翻阅至下一页浏览. #pragma mark - UIScrollViewDelega ...
- 期盼已久的spring-net居然有新版本2.0.1-GA
https://github.com/spring-projects/spring-net/tree/spring-net-2.0.1-GA https://www.nuget.org/package ...
- HTML5学习笔记(十八):闭包
高阶函数 JavaScript的函数其实都指向某个变量.既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,也可以返回一个函数,这种函数就称之为高阶函数. 函数作为参 ...
- (原)docker的一个“Driver aufs failed to remove...”问题的解决
1. /var/lib/docker/aufs/mnt下的目录不能乱删! /var/lib/docker/aufs/diff下的目录删了就死了!!!!!2. 尽量不要用docker tag -f 这 ...
- 解决kafka集群由于默认的__consumer_offsets这个topic的默认的副本数为1而存在的单点故障问题
抛出问题: __consumer_offsets这个topic是由kafka自动创建的,默认50个,但是都存在一台kafka服务器上,这是不是就存在很明显的单点故障?经测试,如果将存储consumer ...
- python中 staticmethod与classmethod区别
staticmethod与classmethod区别 参考 https://stackoverflow.com/questions/136097/what-is-the-difference-betw ...
- nexus maven私服搭建
1.在服务器上安装jdk 2.下载 nexus-3.14.0-04-unix.tar.gz,并上传到服务器/opt目录 3.解压 tar -zxvf nexus-3.14.0-04-unix.tar. ...