【问题标题】:How to capture error response body and error code in post call where the response is not 200 via java code?如何通过 java 代码在响应不是 200 的调用后捕获错误响应正文和错​​误代码?
【发布时间】:2020-11-06 16:39:26
【问题描述】:

我正在编写下面的代码,但这只是在响应代码为 200 时捕获响应正文。对于所有其他情况,它都失败了。

图片 - postman post call and response where response code is not equal to 200

例如,当响应代码为 409 时,代码会抛出错误

线程“main”java.io.IOException 中的异常:服务器返回 HTTP 响应代码:409 用于 URL:http://fetch.product/v1/products/PD16798270/validate 在 java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1919) 在 java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1515) 在 com.Main.main(Main.java:58)

我在下面使用的代码 -

public static void main(String[] args) throws Exception {       
     
     String url = "http://fetch.product/v1/products/PD16798270/validate";    
     URL u = new URL(url);
    
     StringBuilder postData = new StringBuilder();
     byte[] postDataBytes = postData.toString().getBytes("UTF-8");
     
     HttpURLConnection conn = (HttpURLConnection)u.openConnection();
     conn.setRequestMethod("POST");      
     
     conn.setDoOutput(true);
     conn.getOutputStream().write(postDataBytes);
     
     Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
     StringBuilder sb = new StringBuilder();
     for (int c; (c = in.read()) >= 0;)
            sb.append((char)c);
     String response = sb.toString();
     System.out.println(response);
     
}

【问题讨论】:

    标签: java post http-post postman


    【解决方案1】:

    如果请求返回错误响应,您可以从连接的“错误流”中读取它。例如,无论请求返回成功还是错误,这都会读取正文:

    InputStream input;
    if (conn.getResponseCode() >= 400) {
        input = conn.getErrorStream();
    } else {
        input = conn.getInputStream();
    }
    
    Reader in = new BufferedReader(new InputStreamReader(input, "UTF-8"));
    

    【讨论】:

    • 这工作非常好,伙计!!!...拯救了我的一天。 o/p 现在正常如下 - { "state" : "Created", "errors" : [ { "code" : "ARTICLE_HAS_NO_AUTHORS", "category" : "Article" } ] } 你能帮我怎么做将“ARTICLE_HAS_NO_AUTHORS”部分与错误响应分开?我只想要 Java 代码 o/p 中的 ARTICLE_HAS_NO_AUTHORS。
    • 那个数据格式叫JSON,最好用库来解析:stackoverflow.com/questions/2591098/how-to-parse-json-in-java
    猜你喜欢
    • 2013-09-08
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 2017-05-27
    • 1970-01-01
    相关资源
    最近更新 更多