如果我的理解是正确的,则可以自由地为saveEmployee()添加/删除参数。例如,当您按如下方式添加“ loc”时,事件发生时saveEmployee()会收到“非null对象”。对于queryParams也是如此。
@Controller
public class Employee {
@RequestMapping("/save")
public void saveEmployee(Locale loc,
@RequestParam Map<String, String> queryParams) {
// saving employee
}
}
仅通过在此处添加参数“ loc”,该方法将如何接收非null的Locale对象?我想知道其背后的逻辑。
Spring的DispatcherServlet将从客户端转发请求到您的控制器,为您提供该参数。为此,它从ApplicationContext中搜索bean(控制器)所属的对象。
Spring通过使用LocaleResolver
或LocaleContextResolver
为您完成,对于当前请求的语言环境,由可用的最特定的语言环境解析器确定,实际上是MVC环境中已配置的LocaleResolver / LocaleContextResolver
。] >
21.3.3 Defining @RequestMapping handler methods
@RequestMapping处理程序方法可以具有非常灵活的签名。下一节介绍了受支持的方法参数和返回值。
可以以任意顺序使用大多数参数,只有BindingResult参数除外。
当前请求语言环境的java.util.Locale,由可用的最特定的语言环境解析器确定,实际上是MVC环境中配置的LocaleResolver / LocaleContextResolver。
Spring查看方法参数,它们的类型和注释,然后确定它是否可以提供该类型/注释的对象。