使用到的注解导入包说明:
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.*;
GET 请求的参数对象定义:
@Data
@ApiModel
public class Test {
@NotEmpty(message = "手机号码不为空")
@Size(min = 11,max = 11,message = "手机长度不合法")
@ApiModelProperty(value = "手机号码")
private String phone;
@NotEmpty(message = "code参数异常")
@ApiModelProperty(value = "code")
private String code;
@NotEmpty(message = "unionId参数异常")
@ApiModelProperty(value = "unionId")
private String unionId;
@NotEmpty(message = "name参数异常")
@Size(min = 2,max = 10,message = "name长度不合法。最短:2位,最长:10位")
@ApiModelProperty(value = "name")
private String name;
@NotNull(message = "年级不为空")
@Min( value = -9L,message = "年级不在选择范围内")
@Max( value = 10,message = "年级不在选择范围内")
@ApiModelProperty(value = "grade")
private Integer grade;
@NotEmpty(message = "openId不为空")
@NotEmpty(message = "openId参数异常")
@ApiModelProperty(value = "openId")
private String openId;
}
controller层的接口配置:
使用的注解对应的包名
@Valid javax.validation.Valid;
@Validated org.springframework.validation.annotation.Validated
@GetMapping("/testJavaValidation")
@ApiOperation(value = "测试java的验证参数注解 ", notes = "测试java的验证参数注解 ", response = Integer.class)
public Result testJavaValidation(@Valid @ModelAttribute Test test){
return ResultShow.success(test);
}
Get请求时 多个参数转换成对象接收 使用该注解 @ModelAttribute
使注解生效: 在接收对象前面使用 @Valid 或者 @Validated
全局异常捕获类对应 的代码
@ControllerAdvice
@Slf4j
public class GlobalExceptionAdviceConfig {
/**
* 使用java注解校验参数 拦截校验不通过场景
* @param e
* @return
*/
@ExceptionHandler(value = BindException.class)
@ResponseBody
public Result bindException(BindException e) {
log.error("Spring通用检查参数校验不通过。BindException ->{}",e.getMessage());
List<ObjectError> objectErrorList = e.getAllErrors();
List<String> errorMessageList = new ArrayList<>();
if(CollectionUtils.isNotEmpty(objectErrorList)){
//错误非空
for(ObjectError error : objectErrorList){
errorMessageList.add(error.getDefaultMessage());
}
}
return ResultShow.error(ErrorEnum.PARAM_CHECK_NOT_PASSED,errorMessageList);
}
}
Result、ResultShow 自定义返回结果对象 不重要。
ErrorEnum 定义错误状态码的对象 不重要。
错误场景返回结果 展示:
代码中的错误日志打印:
对象嵌套校验:
@Data
@ApiModel
public class NestingTest {
@NotEmpty(message = "name不能为空")
@Size(min = 1,max = 10,message = "name的长度不合法")
private String name;
@NotNull(message = "age不为空")
@Min(value = 1,message = "最小不能小于1")
@Max(value = 10,message = "最小不能大于10")
private Integer age;
}
@Data
@ApiModel
public class Test {
@NotEmpty(message = "手机号码不为空")
@Size(min = 11,max = 11,message = "手机长度不合法")
@ApiModelProperty(value = "手机号码")
private String phone;
@NotEmpty(message = "code参数异常")
@ApiModelProperty(value = "code")
private String code;
@NotEmpty(message = "unionId参数异常")
@ApiModelProperty(value = "unionId")
private String unionId;
@NotEmpty(message = "name参数异常")
@Size(min = 2,max = 10,message = "name长度不合法。最短:2位,最长:10位")
@ApiModelProperty(value = "name")
private String name;
@NotNull(message = "年级不为空")
@Min( value = -9L,message = "年级不在选择范围内")
@Max( value = 10,message = "年级不在选择范围内")
@ApiModelProperty(value = "grade")
private Integer grade;
@NotEmpty(message = "openId不为空")
@ApiModelProperty(value = "openId")
private String openId;
@Valid
@Size(min = 1,message = "集合不能为空")
@ApiModelProperty(value = "nestingTestList")
List<NestingTest> nestingTestList;
}
详细的注解含义说明:
请参考:
https://blog.csdn.net/qq_27680317/article/details/79970590