繁体   English   中英

@RequestParam省略,但映射仍正确完成

[英]@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM