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

java rest调用响应主体在请求错误时丢失

益绯辞
2023-03-14

我打下面的url使用任何Rest客户端,我得到api响应:400坏请求与响应体

输入参数

POST http://SOME.IP:8008/equipment_api/F0-03-8C-C3-D3-CC/832
HEADERS
Content-Type application/json
X-RequestID 1234

BODY
{
"items":[{"updateValue":1, "updateKey": "RESETDEV"}],
"sync":"false"
}

Response :400 Bad Request
{
"error": "RESETDEV is not a valid key."
}

但是java simple client没有显示响应主体。。下面是java代码。。它只给出了400个坏请求。

 public static void main(String[] args) {
    try {           
        String urlParameters = "  {\r\n" + 
                "\"items\":[{\"updateValue\":\"Hi\", \"updateKey\": \"RESETDEV\"}],\r\n" + 
                "\"sync\":false\r\n" + 
                "}";
        URL url = new URL("http://SOME.IP:8008/equipment_api/F0-03-8C-C3-D3-CC/832");
        URLConnection conn = url.openConnection();
        conn.setRequestProperty("content-type", "application/json");
        conn.setRequestProperty("X-RequestID", "1234");         
        conn.setDoOutput(true);
        OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());         
        writer.write(urlParameters);
        writer.flush();         
        String line;
        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));

        while ((line = reader.readLine()) != null) {                
            System.out.println(line);
        }           
        writer.close();
        reader.close();         
    }catch(Exception ex) {          
        System.out.println("some error :: "+ex.toString());         
    }       
}

共有2个答案

郝承悦
2023-03-14

愿它对你有用。它会起作用的

      public static void main(String[] args) {
        try {           
             String urlParameters = "  {\r\n" + 
                "\"items\":[{\"updateValue\":\"Hi\", \"updateKey\": 
              \"RESETDEV\"}],\r\n" + 
                "\"sync\":false\r\n" + 
                "}";
         URL url = new URL("http:http://SOME.IP:8008/equipment_api/F0-03- 
        8C-C3-D3-CC/832");
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.setRequestProperty("content-type", "application/json");
        con.setRequestProperty("X-RequestID", "1234");         
        con.setDoOutput(true);
        OutputStreamWriter writer = new 
        OutputStreamWriter(con.getOutputStream());         
        writer.write(urlParameters);
        writer.flush();         
        String line;

        //BufferedReader reader = new BufferedReader(new 
        InputStreamReader(con.getInputStream()));

        InputStream is = con.getInputStream();
        if(con.getResponseCode() >= 200 && 299 <= con.getResponseCode()) {
            is = con.getInputStream();
        }else {
            is = con.getErrorStream();
        }

        try (BufferedReader br = new BufferedReader(new InputStreamReader(is, 
       "utf-8"))) {
              while ((line = br.readLine()) != null) {                
                System.out.println(line);
            }     
        }

        writer.close();
       // br.close();         
    }catch(Exception ex) {          
        System.out.println("some error :: "+ex.toString());         
    }  
  } 
苏涛
2023-03-14

尝试使用以下代码

final String uri = "http://SOME.IP:8008/equipment_api/F0-03-8C-C3-D3-CC/832";

RestTemplate restTemplate = new RestTemplate();

HttpHeaders headers = new HttpHeaders(); 
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON)); 
HttpEntity<String> entity = new HttpEntity<String>("X-RequestID", "1234");

ResponseEntity<String> result = restTemplate.exchange(uri, HttpMethod.GET, entity, String.class);
System.out.println(result);

用试抓包起来。

 类似资料:
  • 服务器是一个应用程序,具有路由处理程序,用于记录接收到的请求对象,并提供无限的结果流: 当上面的代码运行时,服务器记录请求对象的无限流,但客户端从不记录任何响应对象。 如果通过执行以下操作绑定请求流:,那么客户机在收到所有请求后开始记录响应。

  • 我在雄猫上部署了一个泽西岛 2.5.1 应用程序。我在我的网络中添加了以下配置.xml: 它打印请求和响应头。但是,它没有在响应中打印请求/响应实体/主体。 我试着和不同的情妇玩,但没有运气,比如: 感谢您的回答。看起来我在上面粘贴了错误的配置。这是我在我的网络上有什么.xml: 它记录标题。但它不记录实体。这是我在日志中看到的: 我的Jersey应用程序部署在Tomcat 7_50服务器上。 如

  • 我对反应编程非常陌生,我有一个REST服务,它接受一个请求,然后使用WebFlux WebClient调用另一个API。当API以4xx或5xx响应进行响应时,我希望将响应体记录在我的服务中,然后将响应传递给调用方。我已经找到了许多处理响应日志记录的方法,但它们通常会将mono.error返回给调用方,这不是我想要做的。我几乎可以做到这一点,但是当我向我的服务发出请求时,当我返回API返回的4xx

  • 在我的项目中,我有一组api调用,这些调用应该通过特定的公共验证集进行过滤。在这种情况下,我必须在请求到达REST控制器之前拦截请求,读取请求正文,进行验证,如果请求通过了验证,则将其传递给控制器。 由于不能多次反序列化,因此我使用来复制实际请求。使用它制作的副本,我进行验证。 以下是用于拦截请求的配置类。 这是我在类中的方法,它扩展了 这是我的 一切都准备好了。现在,当我以的模式向任何url发送

  • 我目前正在努力从API获取一些数据,但在一些请求中遇到了问题。 当前调用和其他一些类似的调用似乎不起作用,而其他调用则起作用(除了这些调用不使用“payload”参数)。我在文档中使用了相同的示例,因此不确定这些示例为什么不起作用。 回报 有人有主意吗?谢谢。

  • 我试图用一个网络客户端来替换现有的客户机代码。因此,大多数调用都需要阻塞,这样应用程序的主要部分就不需要更改。当谈到错误处理时,这会带来一些问题。必须涵盖以下几种情况: 在成功的情况下,响应包含A类型的JSON对象 在错误情况下(HTTP状态4xx或5xx)响应可能包含B类型的JSON对象 在某些具有响应状态404的请求上,我需要返回一个与成功响应类型匹配的空 为了产生正确的错误(