user9735824
user9735824

Reputation: 1256

Resttemplate not working if there is bad request

I am trying to send bad request from spring boot rest for validation error. Below is my method

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

}

On client side I have something like below. But it is throwing exception and code is not even reaching if block.

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

In the same code if i send status 200, it is working. What is I am doing wrong here.

Upvotes: 1

Views: 1374

Answers (1)

nickb
nickb

Reputation: 59699

By default RestTemplate will throw an exception on a 4xx error. Instead of checking for the status code in the ResponseEntity, wrap the call in a subclass of RestClientException, for example:

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

You could even catch HttpClientErrorException or HttpServerErrorException separately and handle errors differently for a 4xx and a 5xx error.

Upvotes: 2

Related Questions