如果有错误的请求,RestTemplate无法正常工作

时间:2018-06-29 18:40:39

标签: spring-boot resttemplate

我正在尝试从Spring Boot Rest发送错误请求以验证错误。下面是我的方法

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 :(得分:1)

默认情况下,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());
}

您甚至可以分别捕获HttpClientErrorExceptionHttpServerErrorException并针对4xx和5xx错误以不同的方式处理错误。