Java Spring,请求参数中的中间值

Java Spring,请求参数中的中间值,java,spring,spring-mvc,servlets,query-parameters,Java,Spring,Spring Mvc,Servlets,Query Parameters,是否有一种方法可以使用spring中的请求将查询参数映射为中间值 我可以通过以下方式绑定单字参数: Uri示例:http://localhost:8080/test/?product=hotels 但我希望能够接收如下参数: http://localhost:8080/test/?product-type=hotels 默认情况下,Spring将查询参数键映射到Java变量的名称。然而,在Java中使用带有连字符的变量名在语法上是不正确的,这解释了为什么让Spring为您设置参数值特别困难 一

是否有一种方法可以使用spring中的请求将查询参数映射为中间值

我可以通过以下方式绑定单字参数:

Uri示例:http://localhost:8080/test/?product=hotels

但我希望能够接收如下参数:

http://localhost:8080/test/?product-type=hotels

默认情况下,Spring将查询参数键映射到Java变量的名称。然而,在Java中使用带有连字符的变量名在语法上是不正确的,这解释了为什么让Spring为您设置参数值特别困难

一种可能有效的解决方法是只使用一个Map参数来表示所有参数。这样Spring就不必将任何查询参数映射到变量名,因此连字符的名称可能最终会出现在所有参数的映射中。它可能不像预拆分参数对象那样舒适,但可能会得到连字符键


另一个解决方案可能是配置WebDataBinder,它控制如何将HTTP请求中的数据映射到控制器的请求参数。但这是一整罐虫子,特别是当你刚开始春天的时候。您可以在数据绑定下的文档中了解更多信息。

默认情况下,Spring将查询参数键映射到Java变量的名称。然而,在Java中使用带有连字符的变量名在语法上是不正确的,这解释了为什么让Spring为您设置参数值特别困难

一种可能有效的解决方法是只使用一个Map参数来表示所有参数。这样Spring就不必将任何查询参数映射到变量名,因此连字符的名称可能最终会出现在所有参数的映射中。它可能不像预拆分参数对象那样舒适,但可能会得到连字符键


另一个解决方案可能是配置WebDataBinder,它控制如何将HTTP请求中的数据映射到控制器的请求参数。但这是一整罐虫子,特别是当你刚开始春天的时候。您可以在数据绑定下的文档中了解更多信息。

正如Misha所说,在Java中使用带有连字符的变量名在语法上是不正确的。但是Spring对此没有问题,它允许您在请求中指定一个不同于java代码中变量名的参数名。例如,当使用RequestMapping驱动的控制器时,可以编写:

@RequestMapping("/test")
public ModelAndView getProduct(
        @RequestParam("product-type") String productType) {
...
}

这样,getProduct将被调用为url,如http://localhost/test?product-type=hotels,参数productType将接收hotels的值。所有这些仍然是纯声明性的。

正如Misha所说的,在Java中使用连字符的变量名在语法上是不正确的。但是Spring对此没有问题,它允许您在请求中指定一个不同于java代码中变量名的参数名。例如,当使用RequestMapping驱动的控制器时,可以编写:

@RequestMapping("/test")
public ModelAndView getProduct(
        @RequestParam("product-type") String productType) {
...
}

这样,getProduct将被调用为url,如http://localhost/test?product-type=hotels,参数productType将接收hotels的值。所有这些仍然是纯声明性的。

我对Spring还不熟悉,所以我不知道它的内部工作原理,也不知道我所做的是否正确。据我所知,参数的setter必须与参数名相同,因此我尝试过几次这样的更改:setProductType、setProduct\u type、setProductType,但都不起作用。我没有收到任何错误,参数只是保持为空。您使用的是什么版本的Spring和什么类型的控制器?对于Spring>3.1,@RequestMapping注释可以明确地提供参数名。我使用的是3.2.3版,我不确定您对控制器的定义,因为我对这一点相当陌生。我知道@RequestMapping注释,但由于我将使用许多参数,所以我试图避免使用它,以保持代码更干净。这就是我使用请求而不是注释的原因。我是Spring新手,所以我不知道内部工作原理,也不知道我所做的是否正确。据我所知,参数的setter必须与参数名相同,因此我尝试过几次这样的更改:setProductType、setProduct\u type、setProductType,但都不起作用。我没有收到任何错误,参数只是保持为空。您使用的是什么版本的Spring和什么类型的控制器?对于Spring>3.1,@RequestMapping注释可以明确地提供参数名。我使用的是3.2.3版,我不确定您对控制器的定义,因为我对这一点相当陌生。我知道@RequestMapping注释,但由于我将使用许多参数,所以我试图避免使用它,以保持代码更干净。这就是为什么我使用请求而不是注释。