项目参考:详细参见:《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 自定义效验类型的更多相关文章

  1. 自定义委托类型 - .Net自带委托类型

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递. 与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用. 一.自定义委托类型 1.语法结构:访问修 ...

  2. C:Wordpress自定义文章类型(图视频)

    自定义文章类型,包括: 1:单独的"文章内容模板" 2:单独的"文章列表模板" 3:单独的"控制后台"(文章分类.添加文章) 创建自定义文章 ...

  3. sharepoint2010问卷调查(3)-实现问卷的开始和结束时间(采用自定义字段类型)

    接着上面的图片调查,sharepoint自带的问卷调查是没有开始和结束时间的.这个在项目过程不太实用.问卷一般有开始和结束时间的.因此需要自己 动手开发一个自定义字段类型字段.如下图: 开发添加栏目会 ...

  4. sharepoint2010问卷调查(2)-实现问卷的图片调查(采用自定义字段类型)

    1. 首先建立个图片库上传图片 并建立文件夹1和2,1下有1.1文件夹,2下2.1文件夹,2.1下有文件夹2.1.1. 在1文件夹下放如下图片: 2.建立自定义字段类型,如下图: 3.部署后建立栏目的 ...

  5. Gradle学习系列之九——自定义Task类型

    在本系列的上篇文章中,我们学习了多Project构建,在本篇文章中,我们将学到如何自定义Task类型. 请通过以下方式下载本系列文章的Github示例代码: git clone https://git ...

  6. Unity3D ShaderLab 创建自定义高光类型

    Unity3D ShaderLab 创建自定义高光类型 在上一篇,我们认识了Unity基础的高光实现,本次主要是研究如何对Phong高光类型进行顶点操作,以及在表面着色器中使用Input结构体的新参数 ...

  7. [Other] 自定义MIME类型支持FLV的相关设置

    刚测试知道为何服务器无法播放flv的原因,特此记录而已. 网络空间支持FLV的相关设置,就是自定义一个MIME类型,一般虚拟主机管理里面都有这个选项 自定义MIME类型 扩展名: .flv MIME类 ...

  8. SharePoint 2010 自定义 字段 类型--------省市区联动

    转:http://www.cnblogs.com/sp007/p/3384310.html 最近有几个朋友问到了有关自定义字段类型的问题,为了让更多的人了解自定义字段类型的方法,特写一篇博客与大家分享 ...

  9. 自定义枚举类型的常用操作-附源码(xjl456852原创)

    自定义枚举类型中,假如我们有name和desc这样的属性,并在这个基础上定义了多个对象. 那么就可能用到通过name获取desc,或者通过desc获取name.通过name或者desc获取对应的枚举对 ...

随机推荐

  1. springboot 错误处理

    在 java web开发过程中,难免会有一些系统异常或人为产生一些异常.在 RESTful springboot 项目中如何优雅的处理? 分析:在RESTful 风格的springboot 项目中,返 ...

  2. libsvm_readme[zz from github]

    Libsvm is a simple, easy-to-use, and efficient software for SVM classification and regression. It so ...

  3. centOS7 安装man中文手册

    [root@localhost ~]# yum list | grep man.*zh -.el7 base [root@localhost ~]# yum -y install man-pages- ...

  4. unity, 模拟退后台

    //simulateSwitchToBackground.cs using UnityEngine;using System.Collections;using System.Collections. ...

  5. php分享二十四:数组

    1:isset() 对于数组中为 NULL 的值不会返回 TRUE,而 array_key_exists() 会. 2:利用array_filter和strlen快速过滤数组中等于0的值 $path ...

  6. 【Unity】9.3 粒子系统生成器详解

    分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 上一节已经介绍过了在Unity 5.x中两种创建粒子效果的方式(方式1.方式2). 这一节我们主要学习第2种方式的基本概 ...

  7. 【Unity】6.1 Unity中的C#脚本基础知识

    分类:Unity.C#.VS2015 创建日期:2016-04-16 一.简介 1.常用的C#数据类型 这里简单介绍用Unity开发游戏时,最常用的一些数据类型. (1)基本类型 int.float. ...

  8. C和指针第七章第五题

    实现一个简化的printf函数,能够处理%d,%f,%s,%c等格式. /*************************************************************** ...

  9. Fluent UDF【5】:第一个UDF

    这里以一个简单的初始化案例来描述UDF的使用过程. 0 Fluent中的Patch Fluent中提供了全域初始化以及局部Patch功能.对于整体区域的全局初始化可以采用starndard及hybri ...

  10. Debugging the Java HotSpot VM

    Open Heart Surgery: Analyzing and Debugging the Java HotSpot VM at the OS Level https://www.youtube. ...