springboot-validation 实现API接口入参校验

2 篇文章 0 订阅
1 篇文章 0 订阅

简介

springboot-validation 是集成了hibernate-validator框架,针对web端的rest接口提供接口入参校验,能够对字段的长度,是否为空进行校验,还可以根据业务的特殊需求,实现自定义的注解校验。

maven依赖

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
        <version>2.1.6.RELEASE</version>
      </dependency>

maven会自动导入需要的hibernate-validator包。

参数校验异常收集类 ValidatorConfiguration.java

  通过@ControllerAdvice注解可以实现对spring框架全局异常的捕获。
import com.stock.stockapi.common.JsonResult;
import javax.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindException;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * @author K0171005
 * @version 1.0.0
 * <ul>
 * <li>project : stock</li>
 * <li>package : com.stock.stockservice.config</li>
 * </ul>
 * @since 2019/8/7 16:35
 **/
@RestControllerAdvice
@Slf4j
public class ValidatorConfiguration {

    @ExceptionHandler(BindException.class)
    public JsonResult handleMethodVoArgumentNotValidException(BindException ex) {
        FieldError fieldError = ex.getFieldError();
        //field.ErrorgetField() 读取参数字段
        //field.getDefaultMessage() 读取验证注解中的message值
        String message = "参数{".concat(fieldError.getField()).concat("}").concat(fieldError.getDefaultMessage());
        log.info("参数校验失败111 {}", message);
        JsonResult jsonResult = new JsonResult();
        jsonResult.setMsg(message);
        //        jsonResult.setCode();
        return null;
    }

    @ExceptionHandler(value = ConstraintViolationException.class)
    public JsonResult handleMethodArgumentNotValidException(ConstraintViolationException ex) {
        log.info("参数校验失败");
        return null;
    }
}

这里一个有两个异常需要捕获,一个是BindException,一个是ConstraintViolationException,两个都是验证框架抛出的异常,都需要捕获,在捕获了异常之后,封装异常结果,可以获取到是那些字段校验不通过,以及不通过的原因。

@Getter
@Setter
public class QueryStockReqDTO implements Serializable {

    /**
     * 主键
     * notNull 和size注解用来校验参数
     */
    @NotNull
    @Size(min = 1)
    private String id
}
/**
* 在对象前面添加 @Validated 注解,就可以对象内的参数进行校验。
*/

    @Override
    @GetMapping("/delete")
    public JsonResult<Boolean> deleteStock( @Validated DeleteStockDTO deleteStockDTO) throws BaseException {
        JsonResult<Boolean> jsonResult = new JsonResult<>();
        try {
            jsonResult.setCode(SystemConstant.FAIL);
            jsonResult.setMsg(SystemConstant.FAIL_MSG);
            jsonResult.setData(false);
            stockMapper.deleteByPrimaryKey(deleteStockDTO.getId());
        } catch (Exception e) {
            throw new BaseException(SystemConstant.FAIL, SystemConstant.FAIL_MSG, e);
        }
        return jsonResult;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值