2017-07-19 51 views
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的迴應?

+0

您確定在發生異常時調用給定的ExceptionHandler。根據響應,它由defult ExceptionHandler處理。 –

+0

刪除WebRequest請求參數。然後嘗試。 –

+0

是的,我可以調試,看到處理程序內部的返回語句被調用。此外,如果我返回異常本身而不是DTO,我會得到異常作爲響應。刪除WebRequest參數也沒有幫助。無論如何,我需要它來獲取語言環境。 – aycanadal

回答

1

ErrorDto需要公開領域或需要有公共獲得者。