【问题标题】:Spring MVC 3 - optional URL parameterSpring MVC 3 - 可选 URL 参数
【发布时间】:2012-09-03 18:22:27
【问题描述】:

我写了以下代码:

@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 等 URL,但有一个例外:page.html 应该与 page1.html 给出相同的结果。我正在寻找使 {number} 成为可选的东西,现在它是必需的。

有没有办法做到这一点?

/

【问题讨论】:

标签: spring spring-mvc url-mapping


【解决方案1】:

Rest API - 可选参数和更改值

@GetMapping(value = "/country/list")
public ResponseEntity<?> companyInformationList
(
Pageable pageable,
@RequestParam(name = "q", required = false,defaultValue = "") String q,
@RequestParam(name = "sortby", required = false, defaultValue = "companyId") String sortby,
@RequestParam(name = "order", required = false, defaultValue = "desc") String order,
@RequestHeader(value = "Accept-Language", defaultValue = "ar") String lang ) {

        
        if(sortby.equalsIgnoreCase("countryName")) {
            if(lang.equalsIgnoreCase("en")) {
                sortby="countryNameEn"; 
            }else
            if(lang.equalsIgnoreCase("ar")) {
                sortby="countryNameAr";
            }else
            if(lang.equalsIgnoreCase("fr")) {
                sortby="countryNameFr";
        }

【讨论】:

    【解决方案2】:

    你可以这样使用:

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

    请记住,您必须使用 wrappers(如 Long)而不是 primitives(如 long)。

    我希望这会有用。

    【讨论】:

    • 但这如何映射到 URL 参数?这将需要使用查询参数,例如/page?number=123,而不是问题中询问的/page123 等URL 路径参数。
    • 即使在技术上不是正确的答案,但在我的情况下它对我很有用。我很高兴它在这里。
    【解决方案3】:

    您可能希望实现自定义 WebArgumentResolver 和注释 @OptionalPathVariable 并自己处理

    【讨论】:

      【解决方案4】:

      这个怎么样:

      @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);
          }    
      }
      

      【讨论】:

      • 我也有同样的想法,但我认为 Spring 几乎可以自己解决这个问题。我不知道如何解释,假设我期待像 {number, default=1} 这样的东西。
      猜你喜欢
      • 1970-01-01
      • 2014-04-17
      • 2019-09-02
      • 1970-01-01
      • 2015-12-21
      • 1970-01-01
      • 2011-08-15
      • 2011-07-01
      • 1970-01-01
      相关资源
      最近更新 更多