0

如果我的格式关闭(这里是新的),请原谅。我有一个如下所示的 REST 服务(省略了实现细节):

  import org.springframework.stereotype.Controller;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RequestMethod;
  import org.springframework.web.bind.annotation.RequestParam;
  import org.springframework.web.servlet.ModelAndView;
  import org.springframework.web.servlet.view.json.MappingJacksonJsonView;

  @Controller
  @RequestMapping(value={"/myservice", "/myservice/"}, method=RequestMethod.POST)
  public class MyClass{

  @RequestMapping(value={"/",""}, method=RequestMethod.GET)
  public ModelAndView doSomething(@RequestParam(value="params", required=true) String params){

    Map<String,Object> mymap = new HashMap<String,Object>();
    mymap.put("myparam",params);

    return new ModelAndView(new MappingJacksonJsonView(), mymap); 
    }
  }

我想要做的是编写一个 HttpClient(使用 org.apache.commons.httpclient.HttpClient,我知道那里有另一个来自 apache 的 httpclient),它可以从上述服务中获取“mymap”对象。我知道我必须在我的客户端代码中执行以下操作:

 public Map<String,String> getMap(){

 HttpClient client = new HttpClient();
 HttpMethod method = new GetMethod("myurl");
 method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
                                  new DefaultHttpMethodRetryHandler(3, false));

 NameValuePair [] pair = { new NameValuePair("content","mytestcontentvalue")};
 ((GetMethod)method).setQueryString(pair);

 int code = client.executeMethod(method);

 Map<String,String> mymap = ??   /// what do i do here?

 return mymap;
}

我一直在寻找解决方案,但在这里找不到阅读回复的方法。这是我第一次编写客户端和服务,所以我可能找到了解决方案,但从未理解它:(任何建议都会有帮助!!!谢谢。

4

1 回答 1

1

来自 Apache HttpClient教程

无论服务器返回的状态如何,始终读取响应正文至关重要。有三种方法可以做到这一点:

  • 打电话method.getResponseBody()。这将返回一个字节数组,其中包含响应正文中的数据。
  • 打电话method.getResponseBodyAsString()。这将返回一个包含响应正文的字符串。请注意,从字节到字符串的转换是使用默认编码完成的,因此此方法可能无法在所有平台上移植。
  • 调用method.getResponseBodyAsStream()并读取流的全部内容,然后调用stream.close(). 如果可以接收大量数据,则此方法是最好的,因为可以将其缓冲到文件中或在读取时进行处理。请务必始终读取全部数据并close()在流上调用。

在您以其中一种方式检索响应的内容后,您就可以自由地解析内容并获取您正在寻找的地图......我不相信 Apache HttpClient 为您提供更多的解析功能比起那个来说。

您可以使用 Java 的 JSON 库之一(请参阅:json-lib)来解析由 返回的字符串method.getResponseBodyAsString(),但请注意随着响应大小的增长可能出现的问题。

于 2012-02-24T17:39:12.247 回答