侧边栏壁纸
博主头像
JavaLYG 博主等级

行动起来,活在当下

  • 累计撰写 32 篇文章
  • 累计创建 8 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

SpringBoot参数非空校验

liuyg
2023-01-04 / 0 评论 / 0 点赞 / 32 阅读 / 0 字 / 正在检测是否收录...

你是不是还在这样判断请求参数为空?

        if (StringUtils.isNotBlank(payVo.getSubject())) {
            return ReturnVO.error("请传入商品标题!");
        }

可以改进一下了,SpringBoot支持注解式校验非空参数!

Bean

	@NotBlank(message = "程序版本不能为空")
	@ApiModelProperty(value="版本",name="apiVersion")
	private String apiVersion;

其中@NotBlank 可以写为其他的注解

  • @null 验证对象是否为空

  • @notnull 验证对象是否为非空

  • @asserttrue 验证 boolean 对象是否为 true

  • @assertfalse 验证 boolean 对象是否为 false

  • @min 验证 number 和 string 对象是否大等于指定的值

  • @max 验证 number 和 string 对象是否小等于指定的值

  • @decimalmin 验证 number 和 string 对象是否大等于指定的值,小数存在精度

  • @decimalmax 验证 number 和 string 对象是否小等于指定的值,小数存在精度

  • @size 验证对象(array,collection,map,string)长度是否在给定的范围之内

  • @digits 验证 number 和 string 的构成是否合法

  • @past 验证 date 和 calendar 对象是否在当前时间之前

  • @future 验证 date 和 calendar 对象是否在当前时间之后

  • @pattern 验证 string 对象是否符合正则表达式的规则

  • @Email 验证邮箱

Controller

    @ResponseBody
    @ApiOperation("刷脸初始化")
    @RequestMapping(value = "/initialize.np", method = RequestMethod.POST)
    private ReturnVO initialize(@RequestBody @Valid AliSmilepayInitializeVO aliSmilepayInitializeVO) {
        return ReturnVO.success(aliSmilePayService.initialize(aliSmilepayInitializeVO));
    }

请求就可以自动校验参数了!不过是默认返回报错

20220811151259429-1024x548.png

如果需要自定义返回类型,需要加入全局异常处理配置,其中ReturnVO 是我们公司自己定义的返回实体类

package com.jws.config;

import com.jws.common.pojo.vo.ReturnVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @author liuyg
 * @date 2022年08月11日 14:11
 */
@RestControllerAdvice
public class GlobalException {

    private Logger log = LoggerFactory.getLogger(getClass());

    /**
     * @Author liuyg
     * @Description 全局异常处理
     * @Date 2022/8/11 15:46
     * @Param e
     * @Return com.jws.common.pojo.vo.ReturnVO
     */
    @ResponseStatus(HttpStatus.OK)
    @ExceptionHandler(Exception.class)
    public ReturnVO ortherExceptionException(Exception e) {
        //空指针异常
        if (e instanceof NullPointerException){
            return nullPointerException((NullPointerException) e);
        }
        //空参数异常
        if (e instanceof BindException){
            return bindException((BindException) e);
        }
        //空参数异常
        if (e instanceof MethodArgumentNotValidException){
            return methodArgumentNotValidException((MethodArgumentNotValidException) e);
        }
        // 所有参数异常信息
        log.error("捕获到未知异常:",e);
        return ReturnVO.error("程序出现未知异常,请联系管理员!");
    }

    /**
     * @Author liuyg
     * @Description 空参数异常
     * @Date 2022/8/11 16:03
     * @Param e
     * @Return com.jws.common.pojo.vo.ReturnVO
     */
    public ReturnVO methodArgumentNotValidException(MethodArgumentNotValidException e) {
        BindingResult bindingResult = e.getBindingResult();
        // 所有参数异常信息
        List<ObjectError> allErrors = bindingResult.getAllErrors();
        log.error("捕获到非空参数异常:",e);
        List<String> defaultMsg = allErrors.stream().map(ObjectError::getDefaultMessage).collect(Collectors.toList());
        return ReturnVO.parameterIsNull(defaultMsg);
    }

    /**
     * @Author liuyg
     * @Description 空参数异常
     * @Date 2022/8/11 16:03
     * @Param e
     * @Return com.jws.common.pojo.vo.ReturnVO
     */
    public ReturnVO bindException(BindException e) {
        BindingResult bindingResult = e.getBindingResult();
        // 所有参数异常信息
        List<ObjectError> allErrors = bindingResult.getAllErrors();
        log.error("捕获到非空参数异常:",e);
        List<String> defaultMsg = allErrors.stream().map(ObjectError::getDefaultMessage).collect(Collectors.toList());
        return ReturnVO.parameterIsNull(defaultMsg);
    }

    /**
     * @Author liuyg
     * @Description 空指针异常处理
     * @Date 2022/8/11 15:47
     * @Param e
     * @Return com.jws.common.pojo.vo.ReturnVO
     */
    private ReturnVO nullPointerException(NullPointerException e){
        log.error("捕获到空指针异常:",e);
        return ReturnVO.error("程序出现空指针异常,请联系管理员!");
    }
}

加入配置后的返回结果

20220811151323625.png

 

0

评论区