Apache HTTP 请求在 RESTful Web 服务上以异常结束

Posted

技术标签:

【中文标题】Apache HTTP 请求在 RESTful Web 服务上以异常结束【英文标题】:Apache HTTP Request ends in exception on RESTful webservice 【发布时间】:2016-04-16 16:40:05 【问题描述】:

我需要使用 JUnit 测试 RESTful webservice*(使用 spring)。我使用测试工具中的 IntelliJs 测试了 Web 服务,它运行良好。所以现在我正在使用 ApacheHttpClient 对该网络服务执行 POST 请求。我启动 RESTful 网络服务,然后执行此代码

CloseableHttpClient httpclient = HttpClients.createDefault();
URI uri = new URIBuilder()
             .setScheme("http")
             .setHost("localhost")
             .setPort(8080)
             .setPath("/register")
             .build();
HttpPost post = new HttpPost(uri);
List<NameValuePair> nvps = new ArrayList<>();
nvps.add(new BasicNameValuePair("name", "test"));
nvps.add(new BasicNameValuePair("email", "test"));
nvps.add(new BasicNameValuePair("password", "test"));
post.setEntity(new UrlEncodedFormEntity(nvps));
CloseableHttpResponse response = httpclient.execute(post);
response.close();

但这会以网络服务上的异常告终:

对 URI http://localhost:8080/register 的 servlet 请求在请求正文中包含表单参数,但请求正文已被 servlet 或访问请求参数的 servlet 过滤器使用。只有使用 @FormParam 的资源方法才能按预期工作。通过其他方式消耗请求正文的资源方法将无法按预期工作。 UT005023:对 /error 的异常处理请求

完整的堆栈跟踪:http://pastebin.com/96aJtaS5

*完整源代码位于:https://github.com/pkalauner-tgm/dezsys09-java-webservices 谢谢你的帮助

【问题讨论】:

可能是因为在阅读正文之前对响应调用了 close() 吗? 响应对我来说实际上并不重要,所以我关闭了它,直到请求被执行。正如我所说,异常出现在网络服务上,而不是在这段代码上。 PS:此 URL 的请求应该创建一个用户并保存它,以便响应可以或不正常或某事。像这样 【参考方案1】:

我需要将请求的内容类型设置为json by

post.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");

【讨论】:

以上是关于Apache HTTP 请求在 RESTful Web 服务上以异常结束的主要内容,如果未能解决你的问题,请参考以下文章

接口测试基础002----HTTP请求RESTful风格

如何在通过驼峰调用Restful serice时添加jks文件

使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务

http 的 restful api 的 put 请求,参数放在哪儿?

如何使用RestTemplate访问restful服务

如何在 ubuntu 上为 django restful 服务配置 apache2