【问题标题】:Spring RestTemplate : get with nullable paramaeterSpring RestTemplate:获取可空参数
【发布时间】:2012-08-24 22:07:02
【问题描述】:

我正在尝试提供真正的 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 映射的 JSON 对象放在 POST 正文中并解决问题。但是后来我使用 POST 来获取数据,而 GET 应该在纯 REST 中使用来获取数据。

那么 RestTemplate 和带有可变数据的查询服务如何去做呢?

【问题讨论】:

  • 你能在这里发布异常的完整堆栈跟踪吗?它可能会帮助我们提出建议。
  • thnx 但我自己发现了,我还在学习各种有关 REST 的东西。在我以前的工作中,我只使用了 SOAP。

标签: java spring rest spring-mvc resttemplate


【解决方案1】:

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

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

@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());       
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 2012-01-07
    • 2017-09-14
    • 1970-01-01
    • 2015-06-25
    • 2017-06-30
    • 2018-04-16
    • 1970-01-01
    相关资源
    最近更新 更多