java - 使用@PathVariable将参数传递给Spring Controller

标签 java spring forms jsp spring-mvc

我有一个jsp,它有一个输入字段和一个按钮。我应该将输入值传递给 Controller ​​。我的 Controller 调用 REST API 并获取响应。这里 Controller 工作正常。

搜索菜单.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 时,该 Controller 可以工作。但它没有获取路径变量的输入值。 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>

告诉我如何将输入映射到 Controller 。

最佳答案

该问题缺少一些细节。但可能的原因如下

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

默认情况下,spring的路径变量正则表达式看起来像[^.]*。这意味着除了句号之外的任何内容。因此,如果您的 searchText 包含该字符,您应该考虑使用 /{searchItem:.*}

更改路径变量正则表达式

您的 Controller 有另一个匹配的方法。

如果您有另一个可能与 URI 匹配的 Controller 方法,则可能会调用该其他方法。例如,如果有一个 RequestMapping 需要 /search-menu/abc 并且搜索键是 abc

搜索键首先为空

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

关于java - 使用@PathVariable将参数传递给Spring Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40602557/

相关文章:

java - 如何使用 JPA 注释创建连接表?

java - 在 JFileChooser 中调整 JList 文件元素的大小

html - 表单无法正确使用 Mailto

c# - 如何通过在运行时按下按钮在 C# 中动态删除组合框?

java - 在实现 native Toast 模块后使用来自 React Native 的 native 模块时未处理的 promise 拒绝

java - 映射大量多头的最快方法

java - 策略模式 - 如何注入(inject)策略 - NoUniqueBeanDefinitionException

java - 在 Spring 中实现线程功能的最佳方式

spring - 离线在服务器上部署Maven Spring Boot项目

php - 依赖 HTML 'required' 进行简单的表单验证