BindingResult的使用

BindingResult的使用BindingResul 的简单使用和统一校验处理

BindingResult用在实体类校验信息返回结果绑定。

实体类常用的校验注解有:

@CreditCardNumber 对信用卡号进行一个大致的验证

@NotBlank 不能为空,检查时会将空格忽略

@NotEmpty 不能为空,这里的空是指空字符串

以上注解在使用时,都可以设置自定义message提示信息。

举个栗子:

@ApiModel(value ="TestEntity") public class TestEntity implements Serializable{ private static final long serialVersionUID = 1L; @ApiModelProperty(value = "唯一id") private Long id; @Size(max=10,message="最大长度为10") @ApiModelProperty(value = "名称") private String name; @NotNull(message="参数不能为空") @ApiModelProperty(value = "年龄") private Integer age; //getter setter... }

Controller层:

public class TestController { @PostMapping("/a") @ApiOperation(value = "测试", notes = "") public void test(@RequestBody @Valid TestEntity test,BindingResult bindingResult) { System.out.println(test.toString()); if (bindingResult.hasErrors()) { throw new 自定义Exception("错误提示码",bindingResult.getFieldError().getDefaultMessage()); } } }

 @Valid和BindingResult配套使用,@Valid用在参数前,BindingResult作为校验结果绑定返回,如果@Valid不起作用,换@Validated试试。

bindingResult.hasErrors()判断是否校验通过,校验未通过,bindingResult.getFieldError().getDefaultMessage()获取在TestEntity的属性设置的自定义message,如果没有设置,则返回默认值”javax.validation.constraints.XXX.message”。

————————————-2022-08-05更新以下内容———————————————————–

使用@RestControllerAdvice注解进行统一校验判断,就不用在每个方法上都写BindingResult bindingResult和异常判断。

@RestControllerAdvice public class ControllerExceptionAdvice { @ExceptionHandler({BindException.class}) public ResultVo MethodArgumentNotValidExceptionHandler(BindException e) { // 从异常对象中拿到ObjectError对象 ObjectError objectError = e.getBindingResult().getAllErrors().get(0); return new ResultVo(ResultCode.VALIDATE_ERROR, objectError.getDefaultMessage()); } }
@Getter public enum ResultCode implements StatusCode{ SUCCESS(1000, "请求成功"), FAILED(1001, "请求失败"), VALIDATE_ERROR(1002, "参数校验失败"), RESPONSE_PACK_ERROR(1003, "response返回包装失败"); private int code; private String msg; ResultCode(int code, String msg) { this.code = code; this.msg = msg; } }
@Data public class ResultVo { // 状态码 private int code; // 状态信息 private String msg; // 返回对象 private Object data; // 手动设置返回vo public ResultVo(int code, String msg, Object data) { this.code = code; this.msg = msg; this.data = data; } // 默认返回成功状态码,数据对象 public ResultVo(Object data) { this.code = ResultCode.SUCCESS.getCode(); this.msg = ResultCode.SUCCESS.getMsg(); this.data = data; } // 返回指定状态码,数据对象 public ResultVo(StatusCode statusCode, Object data) { this.code = statusCode.getCode(); this.msg = statusCode.getMsg(); this.data = data; } // 只返回状态码 public ResultVo(StatusCode statusCode) { this.code = statusCode.getCode(); this.msg = statusCode.getMsg(); this.data = null; } }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221436.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午6:06
下一篇 2026年3月17日 下午6:07


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号