如果我的格式化已关闭,请原谅我(这里是新的)。 我有一个类似于下面的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;
}
我一直在寻找解决方案,但我找不到在这里阅读回复的方法。这是我第一次写客户端和服务,所以可能是我找到了解决方案,但从来没有理解它:( 任何建议都会有所帮助!!!谢谢。
答案 0 :(得分:0)
来自Apache HttpClient tutorial:
无论服务器返回的状态如何,始终读取响应正文至关重要。有三种方法可以做到这一点:
- 致电
method.getResponseBody()
。这将返回一个包含响应主体中数据的字节数组。- 致电
method.getResponseBodyAsString()
。这将返回包含响应主体的String。但请注意,从字节到字符串的转换是使用默认编码完成的,因此此方法可能无法在所有平台上移植。- 调用
method.getResponseBodyAsStream()
并阅读流的全部内容,然后调用stream.close()
。如果可以接收大量数据,则该方法是最佳的,因为它可以缓冲到文件或在读取时进行处理。请务必阅读整个数据并在流媒体上调用close()
。
在您以其中一种方式检索到响应的内容后,您可以自由地解析内容并获取您正在寻找的地图......我不相信Apache HttpClient会为您提供更多信息解析的功能比那个。
您可以使用其中一个Java的JSON库(请参阅:json-lib)来解析method.getResponseBodyAsString()
返回的字符串,但要注意随着响应大小的增加而出现的问题。