ConstraintViolationException 的不同响应状态代码
Different response status codes for ConstraintViolationException
所以。在我的 spring 应用程序中,在服务中我验证了一些对象,如果它无效,则抛出 ConstraintViolationException
Set<ConstraintViolation<ImageRequest>> violations = validator.validate(imageRequest);
if (!violations.isEmpty()) {
throw new ConstraintViolationException(violations);
}
在@ControllerAdvice 中它由
处理
@ExceptionHandler(ConstraintViolationException.class)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
ValidationErrorResponse onConstraintValidationException(
ConstraintViolationException e) {
ValidationErrorResponse error = new ValidationErrorResponse();
for (ConstraintViolation violation : e.getConstraintViolations()) {
error.getErrors().put(
violation.getPropertyPath().toString(), violation.getMessage());
}
return error;
}
问题是有时我需要 return 不同的 ConstraintViolationException 响应状态代码(这取决于生成 ConstraintViolationException 的对象类型)。我怎样才能实现它? P.S。对不起英语
移除@ResponseStatus(HttpStatus.OK)
方法 A
@ExceptionHandler(ConstraintViolationException.class)
@ResponseBody
ValidationErrorResponse onConstraintValidationException(
ConstraintViolationException e, HttpServletResponse response) {
ValidationErrorResponse error = new ValidationErrorResponse();
for (ConstraintViolation violation : e.getConstraintViolations()) {
error.getErrors().put(
violation.getPropertyPath().toString(), violation.getMessage());
}
response.setStatus(..based on some condition set status code ..);
return error;
}
- 方法 B(恕我直言:好多了)
@ExceptionHandler(ConstraintViolationException.class)
ResponseEntity<ValidationErrorResponse> onConstraintValidationException(
ConstraintViolationException e) {
ValidationErrorResponse error = new ValidationErrorResponse();
for (ConstraintViolation violation : e.getConstraintViolations()) {
error.getErrors().put(
violation.getPropertyPath().toString(), violation.getMessage());
}
return ResponseEntity.status(..desired status..).body(error);
}
所以。在我的 spring 应用程序中,在服务中我验证了一些对象,如果它无效,则抛出 ConstraintViolationException
Set<ConstraintViolation<ImageRequest>> violations = validator.validate(imageRequest);
if (!violations.isEmpty()) {
throw new ConstraintViolationException(violations);
}
在@ControllerAdvice 中它由
处理@ExceptionHandler(ConstraintViolationException.class)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
ValidationErrorResponse onConstraintValidationException(
ConstraintViolationException e) {
ValidationErrorResponse error = new ValidationErrorResponse();
for (ConstraintViolation violation : e.getConstraintViolations()) {
error.getErrors().put(
violation.getPropertyPath().toString(), violation.getMessage());
}
return error;
}
问题是有时我需要 return 不同的 ConstraintViolationException 响应状态代码(这取决于生成 ConstraintViolationException 的对象类型)。我怎样才能实现它? P.S。对不起英语
移除
@ResponseStatus(HttpStatus.OK)
方法 A
@ExceptionHandler(ConstraintViolationException.class)
@ResponseBody
ValidationErrorResponse onConstraintValidationException(
ConstraintViolationException e, HttpServletResponse response) {
ValidationErrorResponse error = new ValidationErrorResponse();
for (ConstraintViolation violation : e.getConstraintViolations()) {
error.getErrors().put(
violation.getPropertyPath().toString(), violation.getMessage());
}
response.setStatus(..based on some condition set status code ..);
return error;
}
- 方法 B(恕我直言:好多了)
@ExceptionHandler(ConstraintViolationException.class)
ResponseEntity<ValidationErrorResponse> onConstraintValidationException(
ConstraintViolationException e) {
ValidationErrorResponse error = new ValidationErrorResponse();
for (ConstraintViolation violation : e.getConstraintViolations()) {
error.getErrors().put(
violation.getPropertyPath().toString(), violation.getMessage());
}
return ResponseEntity.status(..desired status..).body(error);
}