ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-08-07 18:31:15  阅读:244  来源: 互联网

标签:body http postman springframework 对方 headers 参数 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、我用多种方式 验证自己接口的正确性,但 要 验证别人的 错误,口头说有时并不能让对方意识到问题。

标签:body,http,postman,springframework,对方,headers,参数,HttpMessageNotReadableException
来源: https://www.cnblogs.com/idea-persistence/p/13454554.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有