bindingresult用法_javax.validation.constraints的用法及BindingResult统一拦截

本文介绍了Spring MVC中使用BindingResult处理参数验证的方法,结合javax.validation注解如@Null、@NotNull、@NotBlank等进行详细解释,并展示了如何实现统一异常拦截处理。
摘要由CSDN通过智能技术生成

49fd83dbe3c47a9df6d3b90f3fd337c1.png

一.简单实例

1.1.编写param

import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * @Class: DemoParam
 * @Author: YoniYuan
 * @Date: 2020-07-11 19:07
 * @Version: Angel
 */
@Data
public class DemoParam {

    @NotBlank(message = "传入name不能为空")
    private String name;

    @NotNull(message = "传入age不能为空")
    private Integer age;
}

1.2.编写controller

    /**
     * 测试Demo
     * @param param
     * @param bindingResult
     * @return
     */
    @PostMapping(value = "/demo")
    public String demo01(@RequestBody @Valid DemoParam param, BindingResult bindingResult) {
        log.info("/demo...start..." + param.toString());
        if (bindingResult.hasErrors()) {
            return bindingResult.getFieldError().getDefaultMessage();
        }
        return "SUCCESS!" + param.toString();
    }

1.3.请求

name为空:

10e402bec33aa6e7af8e57fa7b05e604.png
图1 测试name为空

age为空:

e24d0aa7a6d2ea6bfefa089ffa2f71ce.png
图2 测试age为空

正常传参:

bd4dd601d8818d833a3fc2e907f8b7a6.png
图3 正常测试

二.API

  1. @Null:参数为null
  2. @NotNull:不能为null
  3. @NotBlank:字符串不能为null或者trim()后不能为空
  4. @NotEmpty:验证字符串或集合/数组不能为空
  5. @AssertFalse:必须是false
  6. @AssertTrue:必须是true
  7. @Pattern(regexp="") :必须满足正则条件
  8. @Size(max = 18, min = 4):验证字符串/数组/集合长度范围
  9. @Max:最大值上限
  10. @Min:最小值下限
  11. @DecimalMax("11.5"):传入字符串构建一个BigDecimal,规定值要小于这个值
  12. @DecimalMin:用来限制浮点数大小
  13. @Range(min=2, max=4):检查数字是否在此范围
  14. @Past:限定日期必须是过去的日期
  15. @Future:限定日期必须是未来日期
  16. @Email:验证邮箱地址(示例:yoni123@136)
  17. @URL(protocol=,host=,port=,regexp=,flags=):验证URL

三.统一异常拦截

/**
 * @Class: ParamException
 * @Author: YoniYuan
 * @Date: 2020-07-11 19:49
 * @Version: Angel
 */
@Slf4j
@Order(1)
@ControllerAdvice
public class ValidationException {

    /**
     * 参数异常统一处理
     * @param exception
     * @return
     */
    @ResponseBody
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseDate validationException(MethodArgumentNotValidException exception) {
        BindingResult bindingResult = exception.getBindingResult();
        log.info("参数异常:" + exception);
        if (bindingResult.hasErrors()) {
            String defaultMessage = bindingResult.getFieldError().getDefaultMessage();
            log.info("参数异常信息:" + defaultMessage);
            return BaseController.failResponse(defaultMessage);
        } else {
            log.info("系统异常:" + exception);
            return BaseController.failResponse("-1", "系统异常");
        }
    }
}

/**
 * @Class: ResponseDate
 * @Author: YoniYuan
 * @Date: 2020-07-11 19:52
 * @Version: Angel
 */
@Data
public class ResponseDate<T> {

    private String code;

    private String msg;

    private T date;
}

/**
 * @Class: BaseController
 * @Author: YoniYuan
 * @Date: 2020-07-11 19:53
 * @Version: Angel
 */
public class BaseController {

    private final static String SUCCESS = "200";

    private final static String FAIL = "000";

    public static ResponseDate successResponse() {
        return getResult(SUCCESS, null, null);
    }

    public static ResponseDate successResponse(Object data) {
        return getResult(SUCCESS, null, data);
    }

    public static ResponseDate failResponse() {
        return getResult(FAIL, null, null);
    }

    public static ResponseDate failResponse(String msg) {
        return getResult(FAIL, msg, null);
    }

    public static ResponseDate failResponse(String msg, Object data) {
        return getResult(FAIL, msg, data);
    }

    /**
     * 封装请求结果
     * @param code
     * @param msg
     * @param date
     * @return
     */
    private static ResponseDate getResult(String code, String msg, Object date) {
        ResponseDate result = new ResponseDate();
        result.setCode(code);
        result.setMsg(msg);
        result.setDate(date);
        return result;
    }
}

    /**
     * 测试02
     * @param param
     * @return
     */
    @PostMapping(value = "/demo02")
    public ResponseDate demo02(@RequestBody @Valid DemoParam param) {
        return BaseController.successResponse(param);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值