как поймать настроить исключение с resttemplate и springboot? - PullRequest
0 голосов
/ 05 июня 2019

Я хочу выбросить исключение настройки на сервере и перехватить его на клиенте, но похоже, что исключение настройки было преобразовано в HttpServerErrorException.

TestController.java

@RestController
public class TestController {

    @RequestMapping(value = "/test", method = RequestMethod.POST)
    public String test()  {
            throw new PasswdException("password err");
    }
}

PasswdException.java

public class PasswdException extends RuntimeException {
    public PasswdException(String msg) {
        super(msg);
    }
}

RestTest.java

public class RestTest {
    public static void main(String[] args) {
        RestTemplate restTemplate = new RestTemplate();
        try {
           String s = restTemplate.postForObject("http://localhost:8080/test", null, String.class);
        } catch (Exception e) {
            if(e instanceof PasswdException){
                System.out.println("..........");
                //do sth
            }
        }

    }
}

ожидается: экземпляр исключения клиента PasswdException, но фактическим исключением является HttpServerErrorException

1 Ответ

0 голосов
/ 05 июня 2019

Это невозможно с точки зрения REST, но вы можете достичь этого, сделав определение контракта с: 1. Определите код ошибки HTTP для вашего исключения, например (BAD_REQUEST более уместен, вы можете выбрать любой, который вам подходит):

@ResponseStatus(value=HttpStatus.BAD_REQUEST, reason="Wrong password")
public class PasswdException extends RuntimeException {
    private static final long serialVersionUID = 1L;
}
  1. Код RestTest (Client) должен проверять этот статус HTTP-ошибки следующим образом:

    if(resp.getStatus().equals(HttpStatus.BAD_REQUEST))

и т.д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...