2017-04-06 10 views
1

を受信しない:@ResponseStatus、クライアントは、私はカスタム例外でコードを持っているエラーメッセージ

@ResponseStatus(value = BAD_REQUEST, reason = "Login is busy") 
    public class LoginIsBusyException extends RuntimeException{ 
} 

そして、それを投げることができる方法:

@RequestMapping(method = POST) 
public void registration(@RequestBody UserRest user) throws 
LoginIsBusyException{ 
    userService.checkAlreadyExist(user.getLogin(), user.getMail()); 
    user.setActive(false); 
    UserRest userRest = userService.addUser(user); 
    Integer randomToken = randomTokenService.getRandomToken(userRest.getMail()); 
    mailService.sendMail(randomToken, userRest.getLogin(), userRest.getMail()); 
} 

問題がクライアントということですエラーコードのみを受信しますが、ステータステキストを受信しません"ログイン中です"、既にこの例外をキャッチするメソッドを追加しようとしました。

@ExceptionHandler(LoginIsBusyException.class) 
public void handleException(HttpServletResponse response) throws IOException 
{ 
    response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Login is busy"); 
} 

しかし、メッセージがどこかで失われ、顧客はこの応答を取得:つまり、あなたがresponseを渡していません。あなたの現在のコードとあなたのhandleExceptionメソッドの@ResponseBodyを逃した

答えて

0

とも戻りvoidをボディ、下図のように:

下に示すように、あなたはヘッダとボディの両方を生成するために ResponseEntityを使用
@ResponseBody 
@ExceptionHandler(LoginIsBusyException.class) 
public String handleException(HttpServletResponse response) throws IOException 
{ 
    response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Login is busy"); 
} 

か、他

@ExceptionHandler(LoginIsBusyException.class) 
public ResponseEntity<String> 
       handleException(LoginIsBusyException exe) { 
    return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Login is busy"); 
} 
+0

ありがとうございました。しかし、私は '@ RestController'アノテーションを使用していたので、' @ ResponseBody'を使用しませんでした。私はこの質問を別の方法で決めました。もっと正確に言えば、メッセージがヘッダにくるのを待って間違っていました。メッセージはjson bodyにありました。私はSoapUiで応答があるとき、これを理解しました。カスタム例外が正しく機能する、それは私の間違いだった。あなたの答えも正しくあります。 –

関連する問題