2017-12-09 8 views
0

入力が空白の場合は例外をスローするメソッドがあります。入力(この場合はリスト)は、空であれば例外をスローします。私はJUnitを使用してこれをデバッグし、[]で渡すことで例外がスローされることを確認できます。しかし、私のフロントエンドのアプリケーションでは、空のリストを渡すとレスポンスのステータスが200(開発者用コンソールに表示されます)のままです。例外をスローして、レスポンスステータス500を生成してはいけませんか?少なくともそれが私が探しているものなので、ユーザーにエラーメッセージを返すことができます。応答ステータスを500にするにはどうすればよいですか?私は春のフレームワークを使用しています。ここJavaスロー例外でまだ200のステータスコードが生成されています

public Boolean validate(List<HashMap<String, Object>> myList) throws MyException{ 
Boolean hasErrors = false; 
    if(!myList.isEmpty()){ 
     //logic goes here 
     .... 
    } else{ 
     hasErrors = true; 
     throw new MyException("myList shouldn't be empty "); 
    } 
    return hasErrors; 
} 

Exceptionクラス:

public class MyException extends Exception { 
    public MyException() { super(); } 
    public MyException(String message) { super(message); } 
    public MyException(String message, Throwable cause) { super(message, cause); } 
    public MyException(Throwable cause) { super(cause); } 
} 

任意の助けいただければ幸いです。

+3

HTTPエンドポイントのコードも投稿できますか? 'validate'は間違いなく' MyException'を投げますが、例外が上に上がっているように見えます。 – hugh

+0

あなたのRESTコントローラクラスのコード実装を共有してください –

答えて

0

proper exception handling using Spring MVCを使用することをお勧めします。そのようにすれば、例外をスローするときにステータスコードとして返される内容がはっきりします。たとえば、あなたは例外クラスで、このような何かを行うことができ

@ResponseStatus(value=HttpStatus.INTERNAL_SERVER_ERROR, reason="myList shouldn't be empty") 
public class MyException extends Exception { 
    public MyException() { super(); } 
    public MyException(String message) { super(message); } 
    public MyException(String message, Throwable cause) { super(message, cause); } 
    public MyException(Throwable cause) { super(cause); } 
} 
0

あなたは、あなたがクライアントに何をしたいの戻り状況を指定、次に投げる例外を処理するために@ControllerAdviceを使用することができます。

ここでは、ユーザーがアップロードしているファイルがWebサイトでは大きすぎて、不正なリクエスト(HTMLコード400)を返すかどうかをテストする例を示します。

toExceptionResponeStringは、私の例外をjson文字列に変換するメソッドに過ぎません。戻り値は文字列です。

MaxUploadSizeExceededExceptionの代わりにMyExceptionクラスを使用し、そこから処理することができます。

@ControllerAdvice 
public class ExceptionController extends ResponseEntityExceptionHandler { 

    @Autowired 
    private ApplicationLogService appLogService; 

    @ExceptionHandler(value = { MaxUploadSizeExceededException.class }) 
    protected ResponseEntity<Object> handleMaxUploadSizeExceededException(Exception ex, WebRequest request) { 
    MaxUploadSizeExceededException musee = (MaxUploadSizeExceededException)ex; 
    SizeLimitExceededException slee = musee.getCause() instanceof SizeLimitExceededException ? (SizeLimitExceededException) musee.getCause() : null; 
    Long maxSize = slee == null ? musee.getMaxUploadSize() : slee.getPermittedSize(); 
    Long actualSize = slee == null ? Long.valueOf(request.getHeader("Content-Length")) : slee.getActualSize(); 

    PortalException pre = PortalException.fileSizeTooLarge(maxSize, actualSize); 
    try { 
     appLogService.addExceptionEntry(pre.getMessage()); 
    } catch (Exception e) { } 
    return handleExceptionInternal(ex, toExceptionResponseString(pre), new HttpHeaders(), HttpStatus.BAD_REQUEST, request); 
    } 
} 
関連する問題