当前位置: 首页 > 知识库问答 >
问题:

当使用REST模板调用HTTP delete方法时,如何在Java中获得响应体(JSON)

姜志行
2023-03-14

我试图使用REST模板从另一个组件调用delete方法。我在POSTMAN中收到的响应是以下JSON:

    {
       "code": 100,
       "message": "my message"
    }

我应该无法删除该对象,所以我的请求在org.springframework.web.client.HttpClienterRoreXception失败。

在日志中,我只看到:

[Request processing failed; nested exception is org.springframework.web.client.HttpClientErrorException: 400 Bad Request] with root cause...

这是我用来捕获HttpClienterRoreXception的代码:

try{
            restTemplate.delete(url);
            }
            catch (HttpClientErrorException e) {
                LOG.error("FM HttpClientErrorException caught");
                LOG.error("FM response body : {}", e.getResponseBodyAsString());
                LOG.error("FM response headers message: {}", e.getResponseHeaders().toString());
                LOG.error("FM response message : {}", e.getMessage());
                LOG.error("FM response status : {}", e.getStatusCode());
            }

我在其他文章DELETE in Spring RestTemplate with HttpEntity 中看到,一个解决方案是捕捉异常并尝试获取响应的主体。

但是,在我的情况下,这总是空的。

ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.DELETE, null, String.class);
            LOG.info("FM response body : {}", response.getBody());
            LOG.info("FM response status : {}", response.getStatusCode());
Unit tes2018-06-12T15:23:02,960Z  [main] ERROR c.v.b.s.impl.ServiceImpl     - HttpClientErrorException caught
2018-06-12T15:23:02,960Z  [main] ERROR c.v.b.s.impl.ServiceImpl     - response body : []
2018-06-12T15:23:02,960Z  [main] ERROR c.v.b.s.impl.ServiceImpl     - response headers message: {}
2018-06-12T15:23:02,960Z  [main] ERROR c.v.b.s.impl.ServiceImpl     - response message : 400 Bad Request
2018-06-12T15:23:02,960Z  [main] ERROR c.v.b.s.impl.ServiceImpl     - response status : 400t results:

问题是:

  1. 我们可以使用REST delete调用从响应中检索JSON吗?
  2. 我们可以使用交换来做同样的事情吗?如果是,我们如何检索发送的JSON?我两个都试了,但身体总是空的。

我也看到了这篇文章:REST中成功的DELETE语句的HTTP状态返回代码是什么?第三个问题是:

共有1个答案

鄂昌胤
2023-03-14

1,2)是的,这是可能的。根据我自己的经验,我更喜欢使用JAX-RS规范附带的REST客户机,而不是Spring附带的REST客户机。https://docs.oracle.com/javaee/7/api/javax/ws/rs/Client/package-summary.html

您可以提出任何您喜欢的请求,然后只需获得主体,独立于结果代码。什么都不会丢失。

我知道这不能完全回答你的第一个问题,但可能会有帮助。

3)最好的做法是返回不同的错误代码,表示不同的原因。访问被拒绝了吗?资源不可用吗?有意外的错误吗?

然后,您可以使用swagger/openapi/et,相当容易地记录所有这些内容。

 类似资料:
  • 我有一个方法,调用一个endpoint来发布客户我怎么才能只得到消息"EMAIL ALREADY EXISTS"从响应体的Rest模板,以便在FacesContext中显示它 这是回应机构

  • 我有一个短信api在PHP,我打电话发送短信。我通过一些json和一个url回调来获得响应状态,短信被发送。 之后服务器调用我的回调url,但我不能得到响应体。$_GET和$_POST是空的...留档不存在。它应该有一些json。有人能帮帮我吗?提前感谢

  • 问题内容: 我想拥有一个独立的PHP类,在这里我想拥有一个通过cURL调用API并获取响应的函数。有人可以帮我吗? 谢谢。 问题答案: 只需使用下面的代码即可获得来自宁静的Web服务URL的响应,而我使用的是社交提及URL。

  • 我对@Async和Rest模板调用有问题;下面是我的主要应用程序类,带有一个任务执行器Bean和EnableAsync注释 这是我在Rest控制器中调用的带有异步注释的my测试服务: 此服务在rest模板上返回一个nullPointer;这是stacktrace 但是如果我删除@enableAsync和@Async,那么简单的Rest模板可以很好地工作。 当我传递HttpServlet请求时,Ec

  • 我打下面的url使用任何Rest客户端,我得到api响应:400坏请求与响应体 输入参数 但是java simple client没有显示响应主体。。下面是java代码。。它只给出了400个坏请求。

  • 如何将此Json响应转换为改装bean我得到了Gson错误,就像使用JsonReader一样。setLenient(true)在第1行第1列路径接受格式错误的JSON$ api调用为 字符串CATEGORY\u API=“”https://api.callingservice.com"; 请帮助我解决这个问题,如何将Json响应转换为Bean,我的Bean类如下