2017-07-02 21 views
0

マイSpringMVCのコードは、このような何か例外ハンドラを持っているクライアントに返さない:SpringMVCの例外メッセージが

@ExceptionHandler(SomeException.class) 
@ResponseBody 
public ResponseEntity<String> handleSomeException(SomeException e) 
{ 
    logExceptionMessage(e); 
    return new ResponseEntity<>("custom message", 401); 
} 

私は、クライアント上のコードを読んでいますが、何かのように:

reader = new BufferedReader(new InputStreamReader(contentStream, "UTF-8")); 

例外

public class SomeException extends RuntimeException 
{ 
    public SomeException(String message) 
    { 
     super(message); 
    } 

    public SomeException(String message, Throwable cause) 
    { 
     super(message, cause); 
    } 

    public SomeException(Throwable cause) 
    { 
     super(cause); 
    } 
} 

サーバーエラーがない場合、すべて正常に動作します。サーバーは、例外ハンドラをスローする場合

、クライアントが正しく(この場合は401で)エラーステータスコードを受信して​​いるが、代わりにカスタムエラーメッセージを返すので、それは私が取得できますか

Server returned HTTP response code: 401 for URL: http://myUrl.json 

を返しますカスタムエラーメッセージ??

+0

ドゥ私のために働いていますあなたは@ControllerAdviceアノテーションを持っていますか? –

+0

あなたのカスタム例外ハンドラがサーバによってスローされた例外を処理していないかもしれないので、それはデフォルトのjava例外処理機構に渡されます。 –

+0

@RohitGaikwadしかし、正しいHTTPコードを返しています。上記の401を示しましたが、実際に設定したHTTPのステータスを返します。私は私の投稿にハンドラを示しました、私は何かする必要がありますか? –

答えて

0

私はこの問題を見て、私はスローされた例外のエラーメッセージを見ていました。 私は明示的に実際のメッセージを読めば、私は、サーバーのメッセージを確認できます。

private static String getErrorMessage(HttpURLConnection connection) 
{ 
    StringBuilder message = new StringBuilder(); 
    BufferedReader reader; 
    try (InputStream errorStream = connection.getErrorStream()) 
    { 
     reader = new BufferedReader(new InputStreamReader(errorStream)); 
     while (true) 
     { 
      String line = reader.readLine(); 
      if (line == null) 
      { 
       break; 
      } else 
      { 
       message.append(line); 
      } 
     } 
    } catch (IOException e) 
    { 
     logger.warn("Error reading server error message", e); 
    } 
    return message.toString(); 
} 

(Javaの7使用)より簡潔な方法があるかどうかはわからないが、これは

関連する問題