1

我有一个我构建的 Web 服务......我现在要做的是发送一个简单的请求,其中包含从 Tapestry Web 应用程序到该 Web 服务的 json 查询字符串。我四处搜索,大多数人说使用 Apache HttpClient 来实现这一点。与 HttpClient 一起,我正在使用 URIBuilder。

我尝试发送的 Json 对象如下所示

{"user":{"userEmail":"jdoe@gmail.com","firstName":"John","lastName":"Doe","phone":"203-555-5555"},"password" :“死的”}

*我意识到以纯文本等形式发送密码的问题......

有效的 url(通过手动输入 Web 浏览器进行测试,并且该 Web 服务已经为 Android 客户端和 iOS 客户端提供服务)看起来像这样

http:// ##.##.###.##/createuser?json={"user":{"userEmail":"jdoe@gmail.com","firstName":"John","lastName" :"Doe","电话":"203-555-5555"},"密码":"dead"}

这是我从谷歌周围捣碎的 HttpClient 代码,试图弄清楚为什么这不起作用。本质上,我要做的是使用 URIBuilder 创建一个 URI,然后使用新构建的 URI 构造一个 HttpPost 或 HttpGet 对象。但是在 URIBuilding 过程中出现了问题。当我调试时,当我尝试设置 URI 的所有方面时会引发异常。

Object onSuccess() throws ClientProtocolException, IOException, URISyntaxException{
    // json = {"user":{"userEmail":"jdoe@gmail.com","firstName":"John","lastName":"Doe","phone":"203- 555-5555"},"password":"dead"}
    String json = user.toJson();
    URIBuilder builder = new URIBuilder();
    // Error gets thrown when I step over the next line
    builder.setScheme("http").setHost("##.###.##.###").setPort(8080).setPath("createuser").setQuery("json=" +json); 
    URI uri = builder.build();

    HttpPost request = new HttpPost(uri);
    DefaultHttpClient httpClient = new DefaultHttpClient();
    String tmp = request.getURI().toString();

    HttpResponse response = httpClient.execute(request); 
    index.setResponse(EntityUtils.toString(response.getEntity()));
    return index;

当我越过我在代码中注释的行时返回的错误是

[错误] TapestryModule.RequestExceptionHandler 请求处理失败,未捕获异常:org.apache.http.client.utils.URLEncodedUtils.parse(Ljava/lang/String;Ljava/nio/charset/Charset;)Ljava/util/List; java.lang.NoSuchMethodError:org.apache.http.client.utils.URLEncodedUtils.parse(Ljava/lang/String;Ljava/nio/charset/Charset;)Ljava/util/List;

我已经尝试了很多其他方法和对象的组合来让这个请求正确地发送到服务器,但似乎没有任何效果。希望我忽略了一些相对简单的事情。

提前感谢您提供的任何指导。

4

1 回答 1

1

您的类路径中很可能有错误版本或两个版本的 apache httpcomponents。如果您正在运行 Tapestry,它将在错误页面上打印出类路径上的所有包。在那里调查,找到加载了哪些 httpcomponents,找出它来自哪里并修复它。

如果这不起作用,您应该与我们分享您的一些运行时环境。哪个 servlet 引擎,从哪个 IDE 运行,或者您是从命令行运行。你在使用 Maven 吗?如果是这样分享你的pom。等等。

于 2012-08-10T07:32:20.487 回答