我刚刚发现,即使我省略了@RequestParam
参数上的organization
注释,Spring仍然能够绑定它。
@RequestMapping(value="", method = RequestMethod.POST) @ResponseBody public String save(String organization){ logger.info(organization); // it works }
任何人都可以指出澄清此行为的文档吗?我始终认为@RequestParam
是绑定工作所必需的。
由于
答案 0 :(得分:1)
看看https://reversecoding.net/spring-mvc-requestparam-binding-request-parameters/有一个解释:
没有@RequestParam的例子
基于列表 在您的应用程序中配置HandlerMethodArgumentResolver, @RequestParam也可以省略。如果你看一下代码 RequestMappingHandlerAdapter的方法getDefaultArgumentResolvers() 最后有一段代码:
// Catch-all resolvers.add(new RequestParamMethodArgumentResolver(getBeanFactory(),true));
resolvers.add(new ServletModelAttributeMethodProcessor(true));
// Catch-all resolvers.add(new RequestParamMethodArgumentResolver(getBeanFactory(),true));
resolvers.add(new ServletModelAttributeMethodProcessor(true));
基本上,它被添加到解析器a RequestParamMethodArgumentResolver,useDefaultResolution设置为 真正。查看文档,我们可以看到这意味着 方法参数,它是一个简单类型,如中所定义 BeanUtils.isSimpleProperty(java.lang.Class)被视为 请求参数,即使它没有注释。请求参数 name是从方法参数名称派生的。
答案 1 :(得分:1)
您的解析器会自动执行此操作。当您将HandlerMethodArgumentResolver
bean传递给解析程序时,BeanUtil
checks如果参数是原始值或简单String
。如果是这样,它就会自行绑定。
答案 2 :(得分:-1)
@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
您将能够看到下面给出的结果。
输出用户名= pwd密码= uname
答案 3 :(得分:-2)
这里有一些@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);
}
单词“required = true”表示该字段必须在请求时提交。