测试httpclient时,报 406错误的解决方法(临时解决)

本文记录了一次使用HttpClient发送POST请求时遇到的HTTP 406 Not Acceptable错误及其解决过程。主要原因是请求头Accept指定的内容类型与服务器响应的实际内容类型不符。文章提供了临时解决方案,并探讨了进一步的解决思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在测试httpclient的post请求时,报了以下错误:

使用Editpus打开之后,如下:
这里写图片描述
出乎意料,先上代码看下,我的测试代码是这么写的:
@Test
public void doPost() throws Exception {
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建一个post对象
HttpPost post = new HttpPost(“http://localhost:8082/httpclient/post.html“);
post.setHeader(“/”,”application/json”);
CloseableHttpResponse response = httpClient.execute(post);
String result = EntityUtils.toString(response.getEntity(),”utf-8”);
System.out.println(result);
}
调用的服务如下:
@RequestMapping(value= “/httpclient/post”,method = RequestMethod.POST)
@ResponseBody
public TaotaoResult testHttpClient() {
return TaotaoResult.ok();
}
百度了一效,原来错误是这样子的:
NotAcceptable 等效于 HTTP 状态 406。NotAcceptable 指示客户端已用 Accept 头指示将不接受资源的任何可用表示形式。
也就是说以@ResponseBody返回的json数据,在httpclient客户端不识别,仔细观察:发现项目中解析json的包也是没有问题的,如下:
这里写图片描述

百度最佳答案解释的特别详细:

HTTP 406 指浏览器不接受所请求页面的 MIME 类型
问题在header中Accept 中。并不是所有的服务器接收json都会在response中指定Content-Type为 application/json的,大多数时候大家用的都是 application/xml,如果服务器回来的相应Content-Type为 application/xml,而你把你请求的Accept指定为application/json 的话就会收到错误406. 把Accept 改成/ 允许所有类型再试就好了。
照了试了试没有作用,还是报错,暂时想到的解决的方案是,将返回的具体的bean类改为string,返回个“OK”字符串,临时解决了问题,后续还要做研究,争取能够彻底解决这个问题。
临时修改代码如下:
@RequestMapping(value= “/httpclient/post”,method = RequestMethod.POST)
@ResponseBody
public String testHttpClient() {
return “ok”;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值