使用java 注解校验参数 、全局异常获取定义的message、对象嵌套校验

8 篇文章 0 订阅

使用到的注解导入包说明:

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

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值