RestTemplate - 当响应体为null时处理潜在的NullPointerException

时间:2017-12-26 11:08:25

标签: spring resttemplate

我正在编写调用某些后端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时,该主体是否可以为空?

1 个答案:

答案 0 :(得分:1)

  

当响应状态代码为200时,该实体是否可以   空?

是的,这很可能完全取决于服务器。通常情况下,如果找不到资源,某些REST API和Spring REST存储库将返回404,但比抱歉更安全。

  

这个product.getProductId()看起来像潜在的NullPointerException   如果productresponseEntity.getBody()为空,我应该处理它吗?   不知何故?

当然你应该。

如果 responseEntity.hasBody() && responseEntity.getBody() != null,您可以查看。从那里要么抛出你自己的例外,要么你认为合适。