使用@PathVariable将参数传递给Spring控制器

时间:2016-11-15 05:19:52

标签: java spring forms jsp spring-mvc

我有一个带有输入字段和按钮的jsp。我应该将输入值传递给控制器​​。我的控制器调用REST API并获得响应。这里控制器工作正常。

搜索引入了menu.jsp

  <input  id="txt-menu-search" name="txt-menu-search" type="text"
                        class="form-control input-sm"/>

            <button class="btn btn-primary input-sm" id="btn-menu-search"><span><i
                    class="glyphicon glyphicon-search"></i></span></button>

SearchMenuController.java

@RequestMapping(value = "/search-menu/{searchItem}", method = RequestMethod.GET)

public ModelAndView generateSearchItem(@PathVariable String searchItem ) {
    ModelAndView modelAndView = new ModelAndView("search-results");
    // modelAndView.addObject("searchItem", searchItem);
    RestTemplate restTemplate = new RestTemplate();
    String getItemUrl = SendStringBuilds.sendString(baseUrl, searchItemNameUrl, searchItem);

    ServerResponseMessage searchItemResponse = restTemplate.getForObject(getItemUrl, ServerResponseMessage.class);
    modelAndView.addObject("it", searchItemResponse.getData());
    modelAndView.addObject("test", searchItem);
    return modelAndView;
}

当我更改URL时,此控制器可以正常工作。但它没有得到路径变量的输入值。 search-menu.jsp中的Ajax如下所示。

<script>
    $("#btn-menu-search").click(function () {
        var searchKey = $("#txt-menu-search").val();
        $.ajax({
            type: 'GET',
            url: '/web-selfcare/search-menu/'+searchKey,
            success: function (result) {
        }
    });
});
</script>

告诉我如何将输入映射到控制器。

2 个答案:

答案 0 :(得分:0)

这个问题缺乏一些细节。但以下可能是可能的原因

您的搜索文本包含.个字符。

默认情况下,spring的路径变量regex看起来像[^.]*。这意味着period以外的任何东西。因此,如果您的searchText包含该字符,则应考虑使用/{searchItem:.*}

更改路径变量regex

您的控制器有另一种方法匹配。

如果您有另一个可能与URI匹配的控制器方法,则可能已调用其他方法。例如,如果有RequestMapping /search-menu/abc且搜索键为abc

搜索键首先为空

最后一种可能性(你应该先检查一下)是搜索键是否正确。您可以通过查看浏览器中提供的检查工具的网络选项卡轻松完成此操作。

答案 1 :(得分:0)

鉴于按钮位于表单内部(由评论中的OP指出),我认为问题是按钮提交表单而不是执行ajax。这也可以解释为什么请求包括获取params而不是disired path params。

可以通过向按钮添加type="button"来解决此问题。

然而,问题缺乏一些信息,所以这可能是错误的。