一、添加依赖
为了避免不必要的错误,可以直接添加如下依赖
<!-- begin --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.1.0.Final</version> </dependency> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.el</artifactId> <version>3.0.1-b11</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator-cdi</artifactId> <version>6.1.0.Final</version> </dependency> <!-- end -->
搞一个异常捕捉类,一个接口响应类
ValidatedExceptionHandler
package com.example.test05.demo.handler;
import com.example.test05.demo.tool.JsonData;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
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.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import java.util.List;
/**
* @author DBC
*/
@Slf4j
@ControllerAdvice
public class ValidatedExceptionHandler {
/**
* 处理@Validated参数校验失败异常
* @param exception 异常类
* @return 响应
*/
@ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentNotValidException.class)
public JsonData exceptionHandler(MethodArgumentNotValidException exception){
BindingResult result = exception.getBindingResult();
StringBuilder stringBuilder = new StringBuilder();
if (result.hasErrors()) {
List<ObjectError> errors = result.getAllErrors();
if (errors != null) {
errors.forEach(p -> {
FieldError fieldError = (FieldError) p;
log.warn("Bad Request Parameters: dto entity [{}],field [{}],message [{}]",fieldError.getObjectName(), fieldError.getField(), fieldError.getDefaultMessage());
stringBuilder.append(fieldError.getDefaultMessage());
});
}
}
return JsonData.buildError(stringBuilder.toString());
}
}
JsonData
package com.example.test05.demo.tool;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class JsonData implements Serializable {
/**
* 状态码 0 表示成功
*/
private Integer code;
/**
* 数据
*/
private Object data;
/**
* 描述
*/
private String msg;
/**
* 成功,不传入数据
* @return
*/
public static JsonData buildSuccess() {
Date day=new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return new JsonData(0, df.format(day), "成功");
}
/**
* 成功,传入数据
* @param data
* @return
*/
public static JsonData buildSuccess(Object data) {
return new JsonData(0, data, "成功");
}
/**
* 失败,传入描述信息
* @param msg
* @return
*/
public static JsonData buildError(String msg) {
Date day=new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return new JsonData(-1, df.format(day), msg);
}
/**
* 自定义状态码和错误信息
* @param code
* @param msg
* @return
*/
public static JsonData buildCodeAndMsg(int code, String msg) {
Date day=new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return new JsonData(code, df.format(day), msg);
}
} 大功告成,可以开始测试了!
一、测试姓名不能为空
@NotBlank(message = "姓名不能为空!")
private String name; /**
* 姓名不能为空
* @param userDO
* @return
*/
@PostMapping("testNameValidated")
public JsonData testNameValidated(@Validated @RequestBody TbUserDO userDO) {
return JsonData.buildSuccess(userDO);
} 效果如下
二、测试年龄的校验
@Min(value = 1, message = "年龄不能小于1!")
@Max(value = 120, message = "年龄不能大于120!")
private String age; /**
* 年龄的控制
* @param userDO
* @return
*/
@PostMapping("testAgeValidated")
public JsonData testAgeValidated(@Validated @RequestBody TbUserDO userDO) {
return JsonData.buildSuccess(userDO);
} 效果如下
三、嵌套测试
@NotBlank(message = "姓名不能为空!")
@Valid
private String name;
@Min(value = 1, message = "年龄不能小于1!")
@Max(value = 120, message = "年龄不能大于120!")
@Valid
private String age; /**
* 综合测试
* @param userDO
* @return
*/
@PostMapping("testValidated")
public JsonData testValidated(@Validated @RequestBody TbUserDO userDO) {
return JsonData.buildSuccess(userDO);
} 效果如下
附加内容
以下图片源自https://blog.csdn.net/sunnyzyq/article/details/103527380
重点,额外知识
我们如果在Controller层就想直接校验,那么在使用如下的方法即可
顶部直接加入
@Validated
@RequestParam() @NotNull(message = "ID不可以为空")
本文作者为DBC,转载请注明。







