Resttemplate не работает, если есть неверный запрос - PullRequest
0 голосов
/ 29 июня 2018

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

public ResponseEntity<?>  getMyData(@Valid @ModelAttribute InputParms ipParms,BindingResult bindingResult )   {  

    MyObject obj=new MyObject ();

    if(bindingResult.hasErrors()) {
        return ResponseEntity.status(400).body(obj);
    }

    //my other code

}

На стороне клиента у меня есть что-то вроде ниже. Но это вызывает исключение, и код даже не достигает блока if.

ResponseEntity<MyObject > resultResp=restTemplate.postForEntity(url,inputParam, MyObject .class);        
if(resultResp.getStatusCode().equals(HttpStatus.OK)) {
    //my success code
}else {
    //my bad response code 
} 

В том же коде, если я отправляю статус 200, он работает. Что я тут не так делаю.

1 Ответ

0 голосов
/ 30 июня 2018

По умолчанию RestTemplate сгенерирует исключение при ошибке 4xx. Вместо проверки кода состояния в ResponseEntity оберните вызов в подкласс RestClientException, например:

try {
    ResponseEntity<MyObject> resultResp = restTemplate.postForEntity(url,inputParam, MyObject .class);        
} catch (HttpStatusCodeException e) {
    System.out.println("Error from server: " + e.getStatusCode() + " - " + e.getResponseBodyAsString());
}

Вы могли бы даже поймать HttpClientErrorException или HttpServerErrorException отдельно и по-разному обрабатывать ошибки для ошибок 4xx и 5xx.

...