首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Spring MVC中的@RequestParam处理可选参数

Spring MVC中的@RequestParam处理可选参数
EN

Stack Overflow用户
提问于 2014-03-13 17:05:34
回答 3查看 347K关注 0票数 207

Spring控制器有可能同时处理这两种请求吗?

1) http://localhost:8080/submit/id/ID123432?logout=true

2) http://localhost:8080/submit/id/ID123432?name=sam&password=543432

如果我定义一个这样的控制器:

 @RequestMapping (value = "/submit/id/{id}", method = RequestMethod.GET,   
 produces="text/xml")
public String showLoginWindow(@PathVariable("id") String id,
                              @RequestParam(value = "logout", required = false) String logout,
                              @RequestParam("name") String username,
                              @RequestParam("password") String password,
                              @ModelAttribute("submitModel") SubmitModel model,
                              BindingResult errors) throws LoginException {...}

不接受带有“注销”的HTTP请求。

如果我定义两个控制器来分别处理每个请求,Spring会报告异常“已经有'Controller‘bean方法...映射”。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-13 17:53:38

您还需要为namepassword请求参数提供required = false。这是因为,当您只提供logout参数时,它实际上需要namepassword,因为它们仍然是必需的。

当你仅仅给出namepassword时,它就起作用了,因为logout不是一个强制参数,这要归功于已经为logout提供的required = false

票数 255
EN

Stack Overflow用户

发布于 2016-11-16 07:52:42

作为Spring 4.1.1的一部分,您现在完全支持Java8 Optional (original ticket),因此在您的示例中,两个请求都将通过您的单个映射端点,只要您将required=false替换为您的3个参数注销、名称和密码的可选:

@RequestMapping (value = "/submit/id/{id}", method = RequestMethod.GET,   
 produces="text/xml")
public String showLoginWindow(@PathVariable("id") String id,
                              @RequestParam(value = "logout") Optional<String> logout,
                              @RequestParam("name") Optional<String> username,
                              @RequestParam("password") Optional<String> password,
                              @ModelAttribute("submitModel") SubmitModel model,
                              BindingResult errors) throws LoginException {...}
票数 190
EN

Stack Overflow用户

发布于 2014-03-13 20:57:50

创建两个处理案例的方法。您可以指示@RequestMapping注释在映射请求时考虑某些参数。这样你就可以很好地把它分成两个方法。

@RequestMapping (value="/submit/id/{id}", method=RequestMethod.GET, 
                 produces="text/xml", params={"logout"})
public String handleLogout(@PathVariable("id") String id, 
        @RequestParam("logout") String logout) { ... }

@RequestMapping (value="/submit/id/{id}", method=RequestMethod.GET, 
                 produces="text/xml", params={"name", "password"})
public String handleLogin(@PathVariable("id") String id, @RequestParam("name") 
        String username, @RequestParam("password") String password, 
        @ModelAttribute("submitModel") SubmitModel model, BindingResult errors) 
        throws LoginException {...}
票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22373696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档