java错误的请求映射通过表单发送它
我想知道如何解决这个问题,让我解释一下:我想创建一个搜索栏,并将用户发送到带有结果的jsp视图。我在控制器中创建了下一个方法:
@RequestMapping(value = "/search={productName}", method = RequestMethod.GET)
public ModelAndView getProducteByName(@PathVariable("productName") String productName) {
ModelAndView modelview = new ModelAndView("/productSearch");
List productsByName = productService.getProductByName(productName);
modelview.addObject("productsByName", productsByName );
return modelview;
我在jsp文件中有一个表单,如下所示:
<!-- Search form -->
<form class="form-inline md-form form-sm mt-0" method="get" >
<i class="fas fa-search" aria-hidden="true"></i>
<input class="form-control form-control-sm ml-3 w-75" type="text" placeholder="Search" name="search"
aria-label="Search">
</form>
问题是,当我在搜索栏中放置任何要搜索的内容时,如果将其放置在url中的?
,则会起作用,因此控制器不理解requestMapping
示例:http://localhost:8080/projectbotigabio/search=potato
它让我:http://localhost:8080/projectbotigabio/?search=potato
我尝试了很多方法,包括尝试将“post”而不是“get”作为一种方法,但它不起作用。。。有解决办法吗
# 1 楼答案
Web浏览器仅支持3种表单提交:
method="get"
每个表单值都使用
?name=value&name=value&...
method="post"
每一个表单值都会被添加到带有内容类型
application/x-www-form-urlencoded
和内容name=value&name=value&...
method="post" enctype="multipart/form-data"
POST请求的内容类型为
multipart/form-data
,内容是一个多部分,每个部分都是一个表单值Web浏览器无法生成您想要的URL,因此您必须自己创建,即阻止Web浏览器发送POST请求,并使用Ajax发送您自己的请求。如果这是你想要的,戴上你的学习帽,开始学习它是如何工作的
我建议您停止尝试使用非标准的URL语法,使用标准的
GET
处理不管怎样,我建议您在尝试进一步偏离标准之前,了解更多关于HTML表单如何工作的知识