請求返回 org.springframework.http.converter.HttpMessageNotReadableException


1 、背景

​ 提供一個接口給三方,都已經用postman 測試完畢。 等到 對方 跨城市 進行 api 對接測試的時候 ,直接 報了異常。

2、異常

2.1

{"success":false,"ret":500,"code":"SYSTEM_ERROR","msg":"系統異常,請聯系管理員!","data":"org.springframework.web.HttpMediaTypeNotSupportedException"}

傳的數據 類型有問題,我定義的是 json, 對方傳的是 表單

2.2

{
    "success": false,
    "ret": 500,
    "code": "SYSTEM_ERROR",
    "msg": "系統異常,請聯系管理員!",
    "data": "org.springframework.http.converter.HttpMessageNotReadableException"
}

這個問題 查了好久,我自己postman 可以,對方就不行。

其實已經很明顯的是 body的問題

方案一:

​ 我讓對方用 postman 先測試下,

居然說還是返回 相同的異常。

​ 我猜想是不是 header參數問題,postman上我自己加的參數就這幾個, 我想是不是 postman

自帶的參數有什么問題,一個一個嘗試,發現 只有 content-Length 打勾的時候,才正常, 最接近的一篇文章header參數Content-length引發的問題—http長連接的理解

​ 難道還要加這參數?? 不科學,平常請求的時候怎么會有這么多參數, 我把他轉成 curl 命令 查看,

發現 其實 也就 幾個參數,並且執行 都能成功。

(猜想 postman 自帶的那些參數是 postman自己做了驗證)

在線的 http 測試做了驗證,也是ok的。 真不知道什么情況。

方案二:

​ 自己寫 client 進行測試,

RestTemplate restTemplate = new RestTemplate();

        String url = "http://127.0.0.1:8081/xxxxx";
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Type", "application/json");
        headers.add("header1", param1);
        headers.add("header2", param2);
        headers.add("header3", param3);
        Map<String,Object> map = new HashMap<>();
        map.put("body1", "value");
        HttpEntity request = new HttpEntity(map, headers);

        ResponseEntity<String> response = restTemplate.postForEntity(url, request, String.class);

        System.out.println(response);

<200,{"success":true,"ret":0,"code":"SUCCESS","msg":"success","data":{"value":"2222"}},[Server:"openresty/1.15.8.2", Date:"Fri, 07 Aug 2020 07:38:33 GMT", Content-Type:"application/json;charset=UTF-8", Transfer-Encoding:"chunked", Connection:"keep-alive"]>

都能正常訪問,對方為什么不行呢? 問題出在對方,但是 不知道對方的問題在哪?

方案三: 打印出 對方的body 請求,已事實說話

打印 body 會存在問題,request.getInputStream() 獲取一次后,后面就失效了。 可以參考

spring boot攔截器中獲取request post請求中的參數,通過 extends HttpServletRequestWrapper 實現 包裝一層。

對方的 body:

正確的body格式:

總結

1、這個問題 還是很郁悶的,對方測試一直有這問題,他不知道哪里問題

2、我用多種方式 驗證自己接口的正確性,但 要 驗證別人的 錯誤,口頭說有時並不能讓對方意識到問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM