使用 @RestControllerAdvice,@Pattern,@Valid 实现统一表单参数校验返回
表单校验有很多种方法,最直接明了的就是直接在代码里面明编码。
这样子写既不美观也不专业,所以直入正题。
使用 @RestControllerAdvice,@ExceptionHandler,@Pattern,@Valid 实现统一表单参数校验返回
@RestControllerAdvice 和 @ExceptionHandler 一起使用可以捕获 controller 层抛出的异常,然后我们就可以对期异常返回进行改造。
@Pattern 带有此注解的属性必须与起指定的正则表达式所匹配。
@Valid 带有此注解的对象会对自己的属性检查,如果带有了 @Pattern,就进行校验。
结合这四个注解,我们就可以进行表单参数的校验返回了。
@RestControllerAdvice
public class CmdbExceptionHandler{
public CmdbExceptionHandler() {
}
@ExceptionHandler({MethodArgumentNotValidException.class})
public CommonResponse handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
final FieldError error = e.getBindingResult().getFieldError();
final String defaultMessage = error.getDefaultMessage();
return CommonResponse.ofFail(HttpStatus.BAD_REQUEST.value(), defaultMessage, HttpStatus.BAD_REQUEST.name(), e.getMessage());
}
}
@ApiModel("资源过滤器输入")
public class FilterBO {
@ApiModelProperty(value = "名称", required = true)
@Pattern(regexp = "^[\\u4e00-\\u9fa5A-Za-z][\\u4e00-\\u9fa5A-Za-z0-9\\-\\_]*$",message = "名称只能由中文,数字,字母,_,-组成")
private String name;
@ApiModelProperty(value = "描述", required = false)
private String description;
@ApiModelProperty(value = "过滤条件", required = true)
@NotNull
public String jql;
}
然后只要在 controller 方法里面加上 @Valid
这样就达到了我们的目的。🎉🎉🎉🎉
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于