是否可以定义@PathVariable 值的范围?

Jac*_*ack 5 java spring spring-mvc

我有一个方法如下,{code} 应该只接受 A、B 或 C。

我知道解决这个问题的一种方法是定义三种方法(每种情况一个),但这不是一种有效的方法。另一种方法是使用包含 switch case 的单一方法,但是有没有更好的方法呢?

@RequestMapping(value = "{code}/selection", method = RequestMethod.GET)
public String showSelectionOptions(@PathVariable String code){
  switch(code){
    case A:
    case B:
    case C:
       return "selection";
    default:
       return "error";
}
Run Code Online (Sandbox Code Playgroud)

Mas*_*ave 6

Spring MVC 有更直接的解决方案来满足您的需求。尝试

@RequestMapping(value = "{code:A|B|C}/selection", method = RequestMethod.GET)
public String showSelectionOptions(@PathVariable String code){
   return "selection";
}
Run Code Online (Sandbox Code Playgroud)

  • 上面只是一个正则表达式,因此如果您编写适合您需要的正确正则表达式,您就有了解决方案。我认为在你的情况下它应该是类似“{code:[AZ]}”或类似的东西 (2认同)

Alb*_*nto 0

我认为你的方法看起来不错。我唯一的建议是,如果您不想将 {code} 作为 URL 参数传递,而是作为请求正文的一部分传递,那么您可以使用而不是将@RequestBody请求@PathVariable正文映射到 DTO 类。您可以使用@validated它来验证所提供的至少一个值 {code} 。

但话虽如此,我不认为你的方法有什么问题。