2023年3月23日16:01:53更新:校验异常捕获,全局返回异常信息
@ExceptionHandler({ConstraintViolationException.class, MethodArgumentNotValidException.class})
public void handleViolationExceptionError(
HttpServletRequest request,
HttpServletResponse response,
ConstraintViolationException exception
) throws IOException {
String query = request.getQueryString();
String url = Strings.isNullOrEmpty(query)
? request.getRequestURL().toString()
: request.getRequestURL() + "?" + query;
log.error(String.format("参数错误, method: %s, url: %s", request.getMethod(), url), exception);
response.setStatus(HttpStatus.OK.value());
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
var msg = "参数校验错误,请检查后重试!原因:" + exception.getMessage();
var res = RGenerator.resCustom(HttpStatus.INTERNAL_SERVER_ERROR.value(), msg); // 此处为自定义的返回对象
var result = JsonUtils.toJson(res).getBytes(StandardCharsets.UTF_8);
response.getOutputStream().write(result);
}
- @AssertFalse 所注解的元素必须是Boolean类型,且值为false
- @AssertTrue 所注解的元素必须是Boolean类型,且值为true
- @DecimalMax 所注解的元素必须是数字,且值小于等于给定的值
- @DecimalMin 所注解的元素必须是数字,且值大于等于给定的值
- @Digits 所注解的元素必须是数字,且值必须是指定的位数
- @Future 所注解的元素必须是将来某个日期
- @Max 所注解的元素必须是数字,且值小于等于给定的值
- @Min 所注解的元素必须是数字,且值小于等于给定的值
- @Range 所注解的元素需在指定范围区间内
- @NotNull 所注解的元素值不能为null
- @NotBlank 所注解的元素值有内容
- @Null 所注解的元素值为null
- @Past 所注解的元素必须是某个过去的日期
- @PastOrPresent 所注解的元素必须是过去某个或现在日期
- @Pattern 所注解的元素必须满足给定的正则表达式
- @Size 所注解的元素必须是String、集合或数组,且长度大小需保证在给定范围之内
- @Email 所注解的元素需满足Email格式
//单参数校验
@RestController
@Validated
public class PingController {
@GetMapping("/getUser")
public String getUserStr(@NotNull(message = "name 不能为空") String name,
@Max(value = 99, message = "不能大于99岁") Integer age) {
return "name: " + name + " ,age:" + age;
}
}
//请求
http://localhost:8080/getUser?name=Allan&age=101
//结果
{
"timestamp": "2019-06-01T04:30:26.882+0000",
"status": 500,
"error": "Internal Server Error",
"message": "getUserStr.age: 不能大于99岁",
"path": "/getUser"
}
//实体类校验
@Data
public class UserInfo {
@NotNull(message = "username cannot be null")
private String name;
@NotNull(message = "sex cannot be null")
private String sex;
@Max(value = 99L)
private Integer age;
}
@PostMapping("/getUser")
public String getUserStr(@RequestBody @Validated({GroupA.class, Default.class}) UserInfo user, BindingResult bindingResult) {
validData(bindingResult);
return "name: " + user.getName() + ", age:" + user.getAge();
}
2021年11月19日09:59:21补充
依赖:校验依赖hibernate,所以要引入相关依赖才可以用
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.7.Final</version>
</dependency>
统一异常处理
/**
* 获取校验错误提示,统一异常处理
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public String handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
log.error(e.getMessage(), e);
return e.getBindingResult().getFieldError().getDefaultMessage();
}
实体类校验
实体类
@Data
public class Entity {
@NotBlank(message = "name不能为空")
private String name;
public Entity(@NotBlank(message = "不能为空") String name) {
this.name = name;
}
public Entity() {
}
}
@PostMapping("/test")
public String test(@Validated @RequestBody Entity entity){
System.out.println(entity);
return "ok";
}
Comments | NOTHING