2016-04-12 5 views
0

私のプログラムのグローバル例外ハンドラを作成していますが、例外が発生しますが、HttpServletResponseからステータスコードを取得しようとすると、常にステータスが200になります。例外クラスから適切なステータスを得る方法はありますか?または、別の仕事がある場合は、それを感謝します。オンラインで何かを見つけることができず、私のハンドラを通過するすべての例外に対してhttpStatusをハードコードしたくありません。私はこの1つの方法ですべての例外をキャッチしたい。これは私が私のGlobalExceptionHandlerクラスで作成された方法は、(また、FYI私はクラスの@ControllerAdviceアノテーションを使用)されていますJava:カスタムグローバル例外ハンドラは常に200のステータスを返します

@ExceptionHandler(value = Exception.class) 
public @ResponseBody 
ResponseEntity<Object> error(HttpServletRequest request, HttpServletResponse response, Exception e) throws Exception { 

    log.error("Error in call to " + request.getRequestURI() + " Response: " + response.toString(), e); 

    ExceptionResource exception = new ExceptionResource(); 
    exception.setLocation(request.getRequestURI()); 
    exception.setStatus(response.getStatus()); 
    exception.setStackTrace(e.getStackTrace()); 

    return new ResponseEntity<>(exception, HttpStatus.valueOf(response.getStatus())); 
} 

答えて

0

ANSWER:私は別の実装を考えていたが、私は@ResponseStatusのアノテーションを使用して作成したカスタム例外のステータスを取得する方法を見つけました。

HttpStatus status = AnnotationUtils.findAnnotation(exception.getClass(), ResponseStatus.class).value(); 

例外は例外をハンドラに渡す場合に使用します。

0

あなたは春のMVCを使用している場合は、あなたの例外は、このような何かを持っている必要があります:

@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No such Order") 
public class OrderNotFoundException extends RuntimeException { 
    // ... 
} 

source