下面我将详细讲解“SpringBoot validator参数验证restful自定义错误码响应方式”的完整攻略。
一、背景介绍
在SpringBoot应用中经常需要对API的请求参数进行验证,如果请求参数不符合要求,需及时响应错误信息告知请求方。SpringBoot提供了Validator机制来方便地进行参数验证,在参数验证不通过时会抛出BindingResult异常,但默认情况下SpringBoot没有提供自定义错误码响应方式,需要我们自己实现。
二、自定义错误码响应方式
2.1 定义统一响应实体类
由于SpringBoot没有提供自定义错误码响应方式,我们需要自己实现,首先需要定义一个统一的响应实体类。该类的属性包括错误码和错误信息,如下所示:
public class ApiResponse<T> {
private Integer code;
private String message;
private T data;
// getter、setter、构造方法省略...
}
2.2 实现自定义错误码处理器
接下来需要实现一个自定义的错误码处理器(ExceptionHandler),当SpringBoot在绑定请求参数时出现BindingResult异常时,会向该处理器传递异常信息,我们可以在处理器中对异常信息进行解析并返回自定义的响应实体类。
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ApiResponse<String> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
BindingResult bindingResult = ex.getBindingResult();
List<ObjectError> allErrors = bindingResult.getAllErrors();
StringBuilder sb = new StringBuilder();
for (ObjectError error : allErrors) {
sb.append(error.getDefaultMessage()).append(";");
}
return ApiResponse.error(ApiCodeEnum.PARAM_ERROR.getCode(), sb.toString());
}
}
2.3 验证参数
最后在Controller层使用@Valid注解并指定需要验证的请求对象即可。
@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping("/add")
public ApiResponse addUser(@Valid @RequestBody UserRequest userRequest) {
// ... 实现添加用户的业务逻辑 ...
return ApiResponse.success();
}
}
三、示例说明
3.1 验证字符串长度范围
例如我们需要验证名字字段的长度范围是否在1到10之间,实现代码如下:
public class UserRequest {
@NotBlank(message = "名字不能为空")
@Length(min = 1, max = 10, message = "名字长度必须在1到10之间")
private String name;
// getter、setter省略...
}
3.2 验证手机号码格式
例如我们需要验证手机号码格式是否符合规范(以1开头的11位数字),实现代码如下:
public class UserRequest {
@NotBlank(message = "手机号码不能为空")
@Pattern(regexp = "^1\\d{10}$", message = "手机号码格式不正确")
private String mobile;
// getter、setter省略...
}
四、总结
通过以上步骤,我们就可以方便地实现SpringBoot validator参数验证restful自定义错误码响应方式。值得注意的是,自定义错误码响应方式不仅能提供更友好的错误提示,还能防止一些安全漏洞,比如SQL注入、XSS攻击等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot validator参数验证restful自定义错误码响应方式 - Python技术站