[英]@RequestParam omitted but mapping is still done correctly
我只是发现,即使我在organization
参数上省略了@RequestParam
批注,Spring仍然能够绑定它。
@RequestMapping(value="", method = RequestMethod.POST) @ResponseBody public String save(String organization){ logger.info(organization); // it works }
任何人都可以指向阐明此行为的文档吗? 我一直都认为@RequestParam
是绑定工作所必需的。
谢谢
看看https://reversecoding.net/spring-mvc-requestparam-binding-request-parameters/有一个解释:
没有@RequestParam的示例
根据您的应用程序中配置的HandlerMethodArgumentResolver列表,也可以省略@RequestParam。 如果您看一下RequestMappingHandlerAdapter的getDefaultArgumentResolvers()方法的代码,则最后有以下代码:
//捕获所有resolvers.add(new RequestParamMethodArgumentResolver(getBeanFactory(),true));
resolvers.add(new ServletModelAttributeMethodProcessor(true));
//捕获所有resolvers.add(new RequestParamMethodArgumentResolver(getBeanFactory(),true));
resolvers.add(new ServletModelAttributeMethodProcessor(true));
基本上,它是将useDefaultResolution设置为true的RequestParamMethodArgumentResolver添加到解析器的。 通过查看文档,我们可以看到,这意味着方法参数(即BeanUtils.isSimpleProperty(java.lang.Class)中定义的简单类型)即使未加注释也被视为请求参数。 请求参数名称是从方法参数名称派生的。
您的解析器会自动执行此操作。 当您将HandlerMethodArgumentResolver
bean传递给您的解析器时, BeanUtil
检查该参数是原始值还是简单的String
。 如果是这样,它将进行绑定本身。
@RequestMapping(value = "/rest")
@ResponseBody
public String save(String username, String password) {
return String.format("username=%s password=%s", username, password);
}
点击服务http:// localhost:8080 / rest?username = mypwd&password = uname
您将能够看到下面给出的结果。
输出: username = pwd password = uname
在这里,我为@RequestParam提供了一些示例,希望它们可以为您提供帮助: @RequestMapping(value = "/selection/findByField", method = RequestMethod.POST) public @ResponseBody List<selectionsDO> add(@RequestParam(value = "field", required = true) String field,@RequestParam(value = "value", required = true) String value) { return mongoService.findByField(field,value); }
@RequestMapping(value = "/selection/findByField", method = RequestMethod.POST) public @ResponseBody List<selectionsDO> add(@RequestParam(value = "field", required = true) String field,@RequestParam(value = "value", required = true) String value) { return mongoService.findByField(field,value); }
单词“ required = true”表示该字段必须根据请求提交。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.