@RequestBody配合@Valid 校验入参参数
自定义一个Controller
import com.example.demo.pojo.User;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid;
/**
* @Author: luoye
* @Date: 2018-10-12
*/
@RestController
public class ValiController {
@PostMapping(value = "/",produces = "application/json;charset=UTF-8")
public User vali(@RequestBody @Valid User user){
return user;
}
}
自定义实体类
import javax.validation.constraints.Max;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; /**
* @Author: luoye
* @Date: 2018-10-12
*/
public class User {
@NotBlank(message = "这个姓名不能为空")
private String name;
@NotNull(message = "这个年龄不能为空")
@Max(value = 105,message = "太大了")
private Integer age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
}
}
自定义全局异常处理器
import com.example.demo.pojo.ErrorMsg;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ResponseBody; import java.util.ArrayList;
import java.util.List; /**
* @Author luoye
* @Date: 2018/10/12 16:50
*/
@ControllerAdvice
public class ExceptionHandlerContrller { @ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public List<ErrorMsg> exception(MethodArgumentNotValidException e) {
BindingResult bindingResult = e.getBindingResult();
List<ObjectError> allErrors = bindingResult.getAllErrors();
List<ErrorMsg> errorMsgs = new ArrayList<>(); allErrors.forEach(objectError -> {
ErrorMsg errorMsg = new ErrorMsg();
FieldError fieldError = (FieldError)objectError;
errorMsg.setField(fieldError.getField());
errorMsg.setObjectName(fieldError.getObjectName());
errorMsg.setMessage(fieldError.getDefaultMessage());
errorMsgs.add(errorMsg);
});
return errorMsgs;
}
}
PostMan测试下
[
{
"field": "name",
"message": "这个姓名不能为空",
"objectName": "user"
},
{
"field": "age",
"message": "这个年龄不能为空",
"objectName": "user"
}
]
附录

@Valid 注解类型的使用: @Null
限制只能为null @NotNull
限制必须不为null @AssertFalse
限制必须为false @AssertTrue
限制必须为true @DecimalMax(value)
限制必须为一个不大于指定值的数字 @DecimalMin(value)
限制必须为一个不小于指定值的数字 @Digits(integer,fraction)
限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction @Future
限制必须是一个将来的日期 @Max(value)
限制必须为一个不大于指定值的数字 @Min(value)
限制必须为一个不小于指定值的数字 @Past
限制必须是一个过去的日期 @Pattern(value)
限制必须符合指定的正则表达式 @Size(max,min)
限制字符长度必须在min到max之间 @Past
验证注解的元素值(日期类型)比当前时间早 @NotEmpty
验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0) @NotBlank
验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格 @Email
验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式
@valid与@validated
https://blog.csdn.net/gaojp008/article/details/80583301
https://blog.csdn.net/qq_37209293/article/details/85613319
@RequestBody配合@Valid 校验入参参数的更多相关文章
- SpringValid优雅校验入参
一.简介 后台业务入口类Controller,对于入参的合法性校验,可以简单粗暴的写出一堆的 if 判断,如下: @RestController @RequestMapping("user& ...
- spring boot中使用javax.validation以及org.hibernate.validator校验入参
这里springboot用的版本是:<version>2.1.1.RELEASE</version> 自带了hibernate.validator,所以不用添加额外依赖 1.创 ...
- SpringBoot2 参数管理实践,入参出参与校验
一.参数管理 在编程系统中,为了能写出良好的代码,会根据是各种设计模式.原则.约束等去规范代码,从而提高代码的可读性.复用性.可修改,实际上个人觉得,如果写出的代码很好,即别人修改也无法破坏原作者的思 ...
- @Validated和@Valid校验参数、级联属性、List
@Validated和@Valid的区别 在Controller中校验方法参数时,使用@Valid和@Validated并无特殊差异(若不需要分组校验的话): @Valid:标准JSR-303规范的标 ...
- Egg.js 中入参的校验
日常作业中免不了频繁处理 GET/POST 的入参,你当然可以每个 action 中都重复地去做这些事情, 从 query 或 body 取出入参, 对可选的入参进行判空, 处理入参的类型转换, 对入 ...
- @Validated和@Valid区别:Spring validation验证框架对入参实体进行嵌套验证必须在相应属性(字段)加上@Valid而不是@Validated
Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR- ...
- springboot项目中接口入参的简单校验
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- @RequestBody,@RequestParam是否能随意改变入参字母大小写
在工作中遇到了一个问题,很多接口有的入参是companyName,有的入参是companyname,实际上,这两入参能任意适配所有接口,甚至随意改变大小写! 1. @RequestBody是完全按照驼 ...
- springMVC如何判断入参是默认参数还是请求传过来的参数?
springMVC如何判断入参是默认参数还是请求传过来的参数?
随机推荐
- nginx + tomcat 实现负载均衡
1.环境准备 服务器A上安装 nginx 作为代理服务器 服务器B上安装 tomcat,~/webapps 下创建 /test目录,创建 /index.html 内容为T1(生产环境中一般是一样的wa ...
- 文件挂载swap
根目录使用率超过79%,根目录总共45G,/home目录下有文件6G的swap,在新加的300G分区/OracleDB中建立4个G的swap替代/home下在swap文件 1.创建4个G的空文件 # ...
- 新手使用python以及pycharm看过来
前言 随着互联网时代的进步,人类与计算机之前的沟通交流越来越便捷,自此交流的媒介--编程语言吸引力更多的人学习,今天我们就来谈谈当前市面上最火的编程语言 1.文件的概念 什么是文件夹.文件 其实是操作 ...
- Pytorch中stack()方法的理解
Torch.stack() 1. 概念 在一个新的维度上连接一个张量序列 2. 参数 tensors (sequence)需要连接的张量序列 dim (int)在第dim个维度上连接 注意输入的张量s ...
- RocketMQ 5.0 POP 消费模式探秘
作者:凯易&耘田 审核校对:白玙 编辑&排版:雯燕 前言:随着 RocketMQ 5.0 preview 的发布,5.0 的重大特性逐步与大家见面.POP Consumer 作为 5. ...
- asp.net中HttpCookie操作cookie的方法
微软对HttpCookie的定义为"提供创建和操作各 HTTP Cookie 的类型安全方法." HttpCookie的构造函数一共有两个 1.HttpCookie(String) ...
- Python如何格式化输出
目录 Python中的格式化输出 1.旧格式化 2.新格式format( ) 函数 Python中的格式化输出 格式化输出就是将字符串中的某些内容替换掉再输出就是格式化输出 旧格式化输出常用的有%d( ...
- C#练习2
using System;class Class1{ public int vlaue = 0;}class Test{ static void Main() { int v1 = 0; int v2 ...
- 妹子始终没搞懂OAuth2.0,今天整合Spring Cloud Security 一次说明白!
大家好,我是不才陈某~ 周二发了Spring Security 系列第一篇文章,有妹子留言说看了很多文章,始终没明白OAuth2.0,这次陈某花了两天时间,整理了OAuth2.0相关的知识,结合认证授 ...
- CF1562E Rescue Niwen!
开始的时候只会一个\(O(n^2log)\) 即做出所有的\(n^2\)串,显然可以用\(SAM\)来进行这样一个排序,然后\(log\)做. 但这种题我们显然要找一些友好的性质: 我们发现字符串的比 ...