Spring 如何确定弹簧控制器的参数方法?
我看到了带有各种参数的SpringMVC控制器处理程序方法。例如:Spring 如何确定弹簧控制器的参数方法?,spring,spring-mvc,Spring,Spring Mvc,我看到了带有各种参数的SpringMVC控制器处理程序方法。例如: XXX() XXX(模型) XXX(HttpServletRequest请求,型号) XXX(HttpServletRequest请求,HttpServletResponse响应) 所以 什么决定了参数列表 为什么Spring控制器处理程序方法没有固定的签名 Spring如何处理这些变化的参数列表 我可以输入任意类型的参数吗 参见spring参考章节:,它列出了所有支持的参数 它没有固定的签名,因为人们常常需要实现太多不同
- XXX()
- XXX(模型)
- XXX(HttpServletRequest请求,型号)
- XXX(HttpServletRequest请求,HttpServletResponse响应)
- 什么决定了参数列表
- 为什么Spring控制器处理程序方法没有固定的签名
- Spring如何处理这些变化的参数列表
- 我可以输入任意类型的参数吗
但是,与基于接口或继承的方法相比,使用灵活的注释库方法最重要的一点是,在一个控制器类中可以有多个请求处理程序方法。(使用接口时,每个处理程序几乎需要一个类。)Spring控制器方法签名非常灵活,支持大量参数。它们列在列表中 关于第二个问题,没有固定的签名,这完全是为了在编写控制器方法时提供灵活性 使用接口的实现解析各个参数。例如,如果使用
@PathVariable
参数注释参数,则其值将由PathVariableMethodArgumentResolver
解析
您甚至可以创建自己的HandlerMethodArgumentResolver
实现,以允许在控制器方法签名中使用某些自定义参数类型
历史上,在Spring中曾经有具有固定签名的控制器。例如,他们将实现接口。该控制器将实现以下方法:
ModelAndView handle(HttpServletRequest request, HttpServletResponse response,
Object command, BindException errors)
然而,Spring从那时起就有所发展,这种方法被弃用,取而代之的是Spring3中基于注释的控制器。您将在这里获得支持的类型列表,这些类型作为处理程序方法的参数 然后,使用java反射,Spring将解析控制器方法的参数。因此,在您的情况下,区域设置和模型将自动传递给您。如果您包含了另一个参数,例如HttpSession,则该参数将传递给您