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获取对应的枚举对 ...
随机推荐
- JS两日期相减
JS两日期相减,主要用到下面两个方法 dateObject.setFullYear(year,month,day) 方法 stringObject.split(separator) 方法 functi ...
- SVN不显示对号的解决方法
具体操作方法如下: 1.到C:\Windows文件夹下,打开regedit.exe 2.Ctrl+F,搜索“ShellIconOverlayIdentifiers” 3.将TortoiseAdded. ...
- error: unpacking of archive failed on file /usr/sbin/zabbix_agent;592e5bc3: cpio: open
# lsattr /usr/ ----------I--e- /usr/lib64 ----------I--e- /usr/bin -------------e- /usr/libexec ---- ...
- rsync 实现文件同步 (重要数据通过rsyncr把数据同步到不同的两台服务器上,这样可以防止服务器的硬盘故障导致数据丢失) 客户端同步时如果要排某个目录
rsync是unix系统下的数据镜像 备份工具,一般linux系统都 自带: # rpm -qa|grep rsync rsync-3.0.9-17.el7.x86_64 服务器端:10.100.0. ...
- 每日英语:Marriage makes our children richer — Here's why
Young people from less-privileged homes are more likely to graduate from college and earn more if ra ...
- 【MySQL】MySQL表设计的常用数据类型
整数类型,tinyint.smallint.mediumint.int.bigint 如果需要保存整数(不含小数),可以选择tinyint.smallint.mediumint.int.bigint, ...
- Shell获取格式化日期
Shell获取格式化日期 shell date 获取昨天日期 使用date -d 选项: date +"%Y%m%d" -d "+n days" 今天的后n天日 ...
- MFC让进程利用所有处理器核心
参考资料: http://blog.csdn.net/baodi_z/article/details/1857820 http://blog.csdn.net/cbnotes/article/deta ...
- idea svn 使用问题
一开始死活提交不上 解决方式 : 勾上use command line client
- 代码重定位和位置无关码——运行于nor flash
通过前面的学习,我们知道,把可执行程序从一个位置复制到另一个位置的过程叫做重定位. 现在有两种方式,第一种是只重定位data段到内存(sdram),为什么需要重定位?因为有些flash的写操作,不是简 ...