我正在尝试提供真正的 RestFull 服务并遵守文档。但是,我现在遇到了一个我看不到明确答案的问题。我想使用过滤器从 web 服务中查询一些数据。webservice的控制器上定义了如下路径
@RequestMapping(value="/rest/postalcode/list/filter?lang={lang}&postalcode={postalcode}&country={country}&city={city}", method = RequestMethod.GET, produces="application/json")
public @ResponseBody JsonPostalCodeList findFilteredPostalCodes(@PathVariable("lang") String lang, @PathVariable("postalcode") String postalcode, @PathVariable("country") Long country, @PathVariable("city") String city, Model model) throws Exception {
}
然后我尝试在客户端使用以下方法调用它
public JsonPostalCodeList findPostalCodes(
JsonPostalCodeSelectorData selectorData) {
String url = getWebserviceLocation()+"/rest/postalcode/list/filter?lang={lang}&postalcode={postalcode}&country={country}&city={city}";
MbaLog.debugLog(logger,"Calling webservice with url: " + url);
return getRestTemplate().getForObject(url, JsonPostalCodeList.class, selectorData.getContactLanguage(), selectorData.getPostalCode(), selectorData.getCountry(), selectorData.getCity());
}
现在 selectorData.getPostalCode() 可以为空,例如,因为用户没有填写要过滤的邮政编码。国家和城市也是如此(总是填写 lang)。但是每次我运行它时,我都会得到一个 IOException not found (可能是由于 null 的原因)。我试过一次,把所有的东西都填满了,我在服务端的方法很完美。那么你如何处理这样的问题呢?
我可以通过将 GET 扔出窗口来解决它,只需将所有内容作为与 Jackson 映射的 JSONobject 放在 POST 正文中即可解决问题。但是后来我使用 POST 来获取数据,而 GET 应该在纯 REST 中使用来获取数据。
那么 RestTemplate 和带有可变数据的查询服务怎么办呢?