Spring MVC:没有@RequestParam的控制器方法参数

时间:2017-04-17 10:14:35

标签: java spring spring-mvc

最近我在Spring MVC(v4.3.7.RELEASE)中遇到了一个奇怪的行为,特别是来自RequestParamMethodArgumentResolver。我尝试做的是使用MvcUriComponentsBuilder获取指向我的控制器的链接,所以这里有两个例子:

什么是明确的

拥有这样的控制器

@Controller
@RequestMapping("/test")
public class TestController {
    @GetMapping("/get")
    @ResponseBody
    public ModelAndView get(@RequestParam(required = false) String param1,
                            @RequestParam(required = false) String param2) {
        ...
    }
}

然后使用MvcUriComponentsBuilder作为fromMethodCall(on(TestController.class).get(null, null)).toUriString()会产生指向 / test / get 的预期链接。

什么不清楚

相同的控制器,但没有@RequestParam注释; MvcUriComponentsBuilder的相同用法。但结果是 / test / get?param1& param2 ,即它的行为好像是用@RequestParam(required = true)注释的......

所以在为Spring创建一个bug之前,我想澄清一下我是否在任何地方都没有弄错:@RequestParam的缺席是否真的与@RequestParam(required = false)相同?我无法在文档中找到它,但它实际上在代码中(参见https://github.com/spring-projects/spring-framework/blob/v4.3.7.RELEASE/spring-web/src/main/java/org/springframework/web/method/annotation/RequestParamMethodArgumentResolver.java#L79

0 个答案:

没有答案