Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何确定弹簧控制器的参数方法?_Spring_Spring Mvc - Fatal编程技术网

Spring 如何确定弹簧控制器的参数方法?

Spring 如何确定弹簧控制器的参数方法?,spring,spring-mvc,Spring,Spring Mvc,我看到了带有各种参数的SpringMVC控制器处理程序方法。例如: XXX() XXX(模型) XXX(HttpServletRequest请求,型号) XXX(HttpServletRequest请求,HttpServletResponse响应) 所以 什么决定了参数列表 为什么Spring控制器处理程序方法没有固定的签名 Spring如何处理这些变化的参数列表 我可以输入任意类型的参数吗 参见spring参考章节:,它列出了所有支持的参数 它没有固定的签名,因为人们常常需要实现太多不同

我看到了带有各种参数的SpringMVC控制器处理程序方法。例如:

  • XXX()
  • XXX(模型)
  • XXX(HttpServletRequest请求,型号)
  • XXX(HttpServletRequest请求,HttpServletResponse响应)
所以

  • 什么决定了参数列表
  • 为什么Spring控制器处理程序方法没有固定的签名
  • Spring如何处理这些变化的参数列表
  • 我可以输入任意类型的参数吗

参见spring参考章节:,它列出了所有支持的参数

它没有固定的签名,因为人们常常需要实现太多不同的控制器,所以需要不同的信息。当然,您可以自己从HttpServletRequest对象提取所有信息,但这不是Spring方式:Spring方式更多的是使用高级抽象来实现业务逻辑,让Spring来完成低级技术工作


但是,与基于接口或继承的方法相比,使用灵活的注释库方法最重要的一点是,在一个控制器类中可以有多个请求处理程序方法。(使用接口时,每个处理程序几乎需要一个类。)

Spring控制器方法签名非常灵活,支持大量参数。它们列在列表中

关于第二个问题,没有固定的签名,这完全是为了在编写控制器方法时提供灵活性

使用接口的实现解析各个参数。例如,如果使用
@PathVariable
参数注释参数,则其值将由
PathVariableMethodArgumentResolver
解析

您甚至可以创建自己的
HandlerMethodArgumentResolver
实现,以允许在控制器方法签名中使用某些自定义参数类型


历史上,在Spring中曾经有具有固定签名的控制器。例如,他们将实现接口。该控制器将实现以下方法:

ModelAndView handle(HttpServletRequest request, HttpServletResponse response,
        Object command, BindException errors)

然而,Spring从那时起就有所发展,这种方法被弃用,取而代之的是Spring3中基于注释的控制器。

您将在这里获得支持的类型列表,这些类型作为处理程序方法的参数

然后,使用java反射,Spring将解析控制器方法的参数。因此,在您的情况下,区域设置和模型将自动传递给您。如果您包含了另一个参数,例如HttpSession,则该参数将传递给您