2012-09-10 33 views
1

我已经写了下面的代码:Spring MVC的3 - 可选的URL参数

@Controller 
@RequestMapping("/page{number}") 
public class IndexController 
{ 
    @RequestMapping(method = RequestMethod.GET) 
    public String printIndex(ModelMap model, @PathVariable int number) 
    { 
     String numberText; 

     switch (number) 
     { 
      case 0: 
       numberText = "Zero"; 
       break; 
      case 1: 
       numberText = "One"; 
       break; 
      default: 
       numberText = "Unknown"; 
       break; 
     } 

     model.addAttribute("number", numberText); 

     return "page"; 
    } 
} 

而且我特林实现像page1.html,page2.html,page3.html用这种方法控制的网址,以及一个例外:page.html应该给page1.html一样的结果。我正在寻找一些可以让{number}选择的东西,现在它是必需的。

在我说的时候有没有办法做到这一点?

/

+0

可能重复的[用SPRING 3.0,我可以做一个可选的路径变量](http://stackoverflow.com/questions/4904092/with-spring-3-0-can-i-make-an-optional-路径变量) – Xaerxess

回答

5

如何:

@Controller 
public class IndexController 
{ 
    @RequestMapping("/page{number}") 
    public String printIndex(ModelMap model, @PathVariable("number") int number) 
    { 
     String numberText; 

     switch (number) 
     { 
      case 0: 
       numberText = "Zero"; 
       break; 
      case 1: 
       numberText = "One"; 
       break; 
      default: 
       numberText = "Unknown"; 
       break; 
     } 

     model.addAttribute("number", numberText); 

     return "page"; 
    } 
    @RequestMapping("/page") 
    public String printIndex(ModelMap model) 
    { 
     return printIndex(model, 1); 
    }  
} 
+0

我有同样的想法,但我认为Spring几乎可以处理这个问题。我不知道如何解释这个,假设我期待的是{number,default = 1}。 –

1

你可能要实现自定义WebArgumentResolver和注释@OptionalPathVariable和自己处理

12

您可以使用这样的事情:

@RequestParam(value = "name", defaultValue = "") Long name 

请记住,你必须使用包装(像龙),而不是原始(像长)。

我希望这会有用。

+0

但是,这如何映射到URL参数?这需要使用一个查询参数*,比如'/ page?number = 123',而不是像问题中提到的/ page123这样的URL路径参数。 – Arjan

+2

即使技术上不是正确的答案,但对我而言,这对我的情况非常有用。我很高兴它在这里。 –