0

我正在尝试提供真正的 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 和带有可变数据的查询服务怎么办呢?

4

1 回答 1

2

刚洗了个冷水澡,我自己发现了:)

我不必使用路径变量,我可以使用请求参数。

@RequestMapping(value="/rest/postalcode/list/filter", method = RequestMethod.GET, produces="application/json")
public @ResponseBody JsonPostalCodeList findFilteredPostalCodes(@RequestParam("lang") String lang, @RequestParam("postalcode") String postalcode, @RequestParam("country") Long country, @RequestParam("city") String city, Model model) throws Exception {
}

并用

@Override
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());       
}
于 2012-08-25T19:54:10.293 回答