问题描述
我正在使用下面的Java(Spring 2.0)代码从webService中读取ResponseEntity:
public ResponseEntity<?> getTemplate() {
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<?> myResponse= restTemplate.postForEntity(
myUrl,myRequestObj,MyResponSEObj.class);
return myResponse;
}
但是,如果myUrl Web服务返回HttpStatus.BAD_REQUEST(400),则不会将其分配给myResponse并引发错误,因此没有ResponseBody,因此我需要将请求包装在try catch块中。这是正确的还是有办法解决? 另外,这是否意味着myUrl Web服务永远不要有意(以编程方式)将myResponSEObj的HttpStatus设置为HttpStatus.BAD_REQUEST?因此,即使myRequestObj包含错误数据,myUrl WebService仍应将响应状态设置为200的某个值,即HttpStatus.NO_CONTENT。欢迎任何评论有关如何正确执行此操作。
解决方法
这是正确的还是有解决办法?
您描述的行为是由spring的detault错误处理程序定义的,如果状态代码在400-499范围内,则抛出HttpClientErrorException
,如果状态代码在400-499范围内,则抛出HttpServerErrorException
。 500-599范围和UnknownHttpStatusCodeException
(如果状态代码未知)。要处理此类错误代码,您可以捕获异常,也可以按照here的说明注册自定义异常处理程序。
这是否还意味着myUrl Web服务永远不应有意(以编程方式)将myResponseObj的HttpStatus设置为HttpStatus.BAD_REQUEST?
根据RFC 7231,状态代码400用于指示由于客户端创建请求时出错(例如格式错误的请求语法,无效的请求),服务器无法或不会处理请求请求 消息框架或欺骗性请求路由)。因此,您可以随意使用该状态代码向客户端指示这种行为。