配置@PathVariable与@RequestParam可选参数时遇路径找不到问题求助
问题解决方案
一、@PathVariable 可选参数问题
你当前的路径配置/getAllCoachByCorporateName/{corporateName}/{roleType}只匹配包含两个路径段的请求,但要让roleType可选,必须配置多个路径模式,让Spring同时兼容有/无第二个参数的请求:
- 修改配置文件中的URL变量,添加无
roleType的路径:
URL.COACH.GET.ALL.COACH.BY.CORPORATE.NAME=/getAllCoachByCorporateName/{corporateName},/getAllCoachByCorporateName/{corporateName}/{roleType}
- 控制器方法参数配置保持不变,
roleType的required=false保留:
@GetMapping(value = {"${URL.COACH.GET.ALL.COACH.BY.CORPORATE.NAME}"}) public ResponseEntity<List<CoachRelatedDetails>> getCoachDetailsByCorporateName( @PathVariable String corporateName, @PathVariable(required = false) RoleType roleType) { System.out.println("ins controller"); return coachFacade.getCoachDetails(corporateName, roleType); }
之后访问http://localhost:8080/getAllCoachByCorporateName/ABC(无roleType)或http://localhost:8080/getAllCoachByCorporateName/ABC/XXX(XXX为RoleType有效值)都能匹配到该方法。注意不要用末尾带斜杠的/ABC/访问,这种路径会被解析为额外空路径段,和配置模式不匹配。
二、@RequestParam 可选参数问题
这里的核心错误是URL配置和请求方式不匹配:你配置的URL变量还是带路径参数的/getAllCoachByCorporateName/{corporateName}/{roleType},但@RequestParam是通过查询参数(?key=value)传递的,路径里不应包含占位符。
解决步骤:
- 修改配置文件中的URL变量为基础路径:
URL.COACH.GET.ALL.COACH.BY.CORPORATE.NAME=/getAllCoachByCorporateName
- 控制器方法参数配置不变:
@GetMapping(value = {"${URL.COACH.GET.ALL.COACH.BY.CORPORATE.NAME}"}) public ResponseEntity<List<CoachRelatedDetails>> getCoachDetailsByCorporateName( @RequestParam String corporateName, @RequestParam(required = false) RoleType roleType) { System.out.println("ins controller"); return coachFacade.getCoachDetails(corporateName, roleType); }
现在访问http://localhost:8080/getAllCoachByCorporateName?corporateName=ABC或http://localhost:8080/getAllCoachByCorporateName?corporateName=ABC&roleType=XXX就能正常匹配了。
内容的提问来源于stack exchange,提问作者Sachin Bhandari
相关产品推荐
相关产品推荐

