spring-boot, как генерировать несколько пользовательских исключений в блоке try на основе ответа Jax-RS Httpstatus - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть что-то вроде этого:

@ResponseStatus(value = HttpStatus.UNAUTHORIZED)
public class MyCustomExceptionA extends RuntimeException {
    public MyCustomExceptionA(String message)  {
        super(message);
    }
}
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class MyCustomExceptionB extends RuntimeException {
    public MyCustomExceptionA(String message){
        super(message);
    }
}
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
public class MyCustomExceptionC extends RuntimeException {
    public MyCustomExceptionA(String message)  {
        super(message);
    }
}
@ControllerAdvice
public class SomeClass  {
    @ExceptionHandler(MyCustomExceptionA.class)
    public ResponseEntity<ExceptionResponse> method1(MyCustomExceptionA  ex){
        ExceptionResponse response = new ExceptionResponse(401, ex.getMessage())
    return new ResponseEntity<>(response, HttpStatus.UNAUTHORIZED);
  }

  method2 for MyCustomExceptionB

  method3 for MyCustomExceptionC
}

Я делаю повторный вызов Jax-RS для получения ответа

try{
    Response response = ClientBuilder.newCLient().target("someURL").path("somePath").get();

    if (response.getStatus() == 400){
        throw new MyCustomExceptionB("some Error message") <-- this don't get thrown
    }else if (response.getStatus() == 401){
        throw new MyCustomExceptionA("some Error message") <-- this don't get thrown
    }else if (response.getStatus() == 404){
        throw new MyCustomExceptionC("some Error message")  <-- this don't get thrown   
}catch(Exception ex){
    log.error("something happened ....")
    throw new Exception("message")                  <-- this overrides above exceptions
}

, когда я пытаюсь выдать пользовательские исключения для 400, 401 или 404 все равно выдает исключение из блока catch .. почему ?? Я отлаживал через него, и он переходит к соответствующим кодам состояния (400, 401 или 404), но в конце все равно выдает исключение из блока catch -> Что я делаю неправильно !!

1 Ответ

0 голосов
/ 25 апреля 2020

Блок catch перехватывает исключения, генерируемые кодом внутри блока try. Вот почему код внутри блока catch запускается после того, как вы выбросили исключение в цепочке if else.

Я бы посоветовал вам ознакомиться с основами исключений перед выполнением весенней загрузки.

try{
  //potentially dangerous code here.
}catch(Exception ex){
  //Catches all Exceptions thrown in try block.
  //Handle ex.
}
...