最近我在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)