我正在编写调用某些后端REST服务的客户端。我正在发送Product对象,该对象将保存在DB中,并在生成的productId的响应正文中返回。
public Long createProduct(Product product) {
RestTemplate restTemplate = new RestTemplate();
final String url = " ... ";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Product> productEntity = new HttpEntity<>(product, headers);
try {
ResponseEntity<Product> responseEntity = restTemplate.postForEntity(url, productEntity, Product.class);
Product product = responseEntity.getBody();
return product.getProductId();
} catch (HttpStatusCodeException e) {
logger.error("Create product failed: ", e);
throw new CustomException(e.getResponseBodyAsString(), e, e.getStatusCode().value());
}
product.getProductId()
看起来像潜在的NullPointerException,如果product
,即responseEntity.getBody()
为空,我应该以某种方式处理它吗?
我看过使用RestTemplate postFprEntity,getForEntity的互联网示例......但没有找到任何处理NPE的示例。我想如果无法设置响应体,则会抛出一些异常并且状态码为5xx。
当响应状态代码为200时,该主体是否可以为空?
答案 0 :(得分:1)
当响应状态代码为200时,该实体是否可以 空?
是的,这很可能完全取决于服务器。通常情况下,如果找不到资源,某些REST API和Spring REST存储库将返回404,但比抱歉更安全。
这个
product.getProductId()
看起来像潜在的NullPointerException 如果product
即responseEntity.getBody()
为空,我应该处理它吗? 不知何故?
当然你应该。
如果 responseEntity.hasBody() && responseEntity.getBody() != null
,您可以查看。从那里要么抛出你自己的例外,要么你认为合适。