有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 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表单如何工作的知识