1
我有一個@RestControllerAdvice
以下@ExceptionHandler
方法:從@RestControllerAdvice @ExceptionHandler方法返回DTO
@ExceptionHandler(BusinessException.class)
public ResponseEntity<Object> onException(BusinessException exception, WebRequest request) {
Locale locale = request.getLocale();
String message = messageSource.getMessage(exception.errorCode.toString(),
exception.arguments, locale);
ErrorDto errorDto = new ErrorDto(
exception.errorCode,
exception.arguments,
message
);
return new ResponseEntity(errorDto, new HttpHeaders(), HttpStatus.CONFLICT);
}
而且ErrorDto
是:
public class ErrorDto {
ErrorCode errorCode;
String[] arguments = new String[]{};
String message;
public ErrorDto(ErrorCode errorCode, String[] arguments, String message){
this.errorCode = errorCode;
this.arguments = arguments;
this.message = message;
}
}
,但我得到當BusinessException
拋出響應是:
{
"timestamp": 1500459833663,
"status": 500,
"error": "Internal Server Error",
"exception": "com.ciet.app.exceptions.BusinessException",
"message": "No message available",
"path": "/CietApi/errorCodeTest"
}
W嗨,我沒有看到ErrorDto
的迴應?
您確定在發生異常時調用給定的ExceptionHandler。根據響應,它由defult ExceptionHandler處理。 –
刪除WebRequest請求參數。然後嘗試。 –
是的,我可以調試,看到處理程序內部的返回語句被調用。此外,如果我返回異常本身而不是DTO,我會得到異常作爲響應。刪除WebRequest參數也沒有幫助。無論如何,我需要它來獲取語言環境。 – aycanadal