我正在尝试从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,则使用相同的代码,它正在工作。我在这里做错什么了。
答案 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());
}
您甚至可以分别捕获HttpClientErrorException
或HttpServerErrorException
并针对4xx和5xx错误以不同的方式处理错误。