我有一个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/