如何在 Spring 的自定义"ResponseEntityExceptionHandler"中发送与"ResponseStatusException"相同的响应正文?



MethodArgumentNotValidException在我的Spring应用程序中抛出时,我希望响应:

  1. 有400码
  2. 有一个类似于你把ResponseStatusException扔进普通控制器时得到的身体

下面是我的代码:

@ControllerAdvice
public class CustomExceptionHandlers extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
FieldError err = ex.getBindingResult().getFieldErrors().get(0);
String msg = "Unknown error";
if (err != null) {
msg = err.getField() + ": " + err.getDefaultMessage();
}
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, msg);
}
}

问题是:它什么也不做(我猜)。我觉得我不应该在ResponseEntityExceptionHandler中抛出异常。

任何想法?

编辑:显然我想要什么DefaultErrorAttributes生产,但我仍然不知道如何使用它。

@Order(Ordered.HIGHEST_PRECEDENCE)
@ControllerAdvice
public class CustomExceptionHandler {
@ResponseStatus(BAD_REQUEST)
@ResponseBody
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, Object>> methodArgumentNotValidException(MethodArgumentNotValidException ex, WebRequest request) {
// Make the message
FieldError err = ex.getBindingResult().getFieldErrors().get(0);
String msg = "Unknown error";
if (err != null) {
msg = err.getField() + ": " + err.getDefaultMessage();
}
// Set attributes
request.setAttribute("javax.servlet.error.status_code", BAD_REQUEST.value(), WebRequest.SCOPE_REQUEST);
request.setAttribute("javax.servlet.error.message", msg, WebRequest.SCOPE_REQUEST);
// Return the error
DefaultErrorAttributes errorAttributes = new DefaultErrorAttributes();
return ResponseEntity.badRequest().body(errorAttributes.getErrorAttributes(request, false));
}
}

相关内容

  • 没有找到相关文章

最新更新