2013-08-24 13 views
14

Próbuję zbudować filtr żądania, który zostanie użyty tylko wtedy, gdy pasuje do wzorca litery e, a następnie numeru. Jednak nie mogę tego zmusić do działania. Ciągle otrzymuję 400 błędów za każdym razem, gdy próbuję czegoś z regex.Regex w kontrolerze sprężynowym

Jeśli po prostu użyję następującego, to "działa", ale także przechwytuje odwzorowania, które nie mają liczb, których nie chcę.

@RequestMapping(value = "e{number}", 
      method = RequestMethod.GET) 

Próbowałem następujących kombinacji.

@RequestMapping(value = "e{number}", 
      params = "number:\\d+", 
      method = RequestMethod.GET) 

@RequestMapping(value = "e{number:\d+}", 
      method = RequestMethod.GET) 

@RequestMapping(value = "/e{^\\+?\\d+\$}", 
      method = RequestMethod.GET) 

@RequestMapping(value = "/{^\\e+?\\d+\$}", 
      method = RequestMethod.GET) 

Odpowiedz

26

Według the documentation, trzeba użyć czegoś jak {varName:regex}. Jest nawet przykład:

@RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{version:\\d\\.\\d\\.\\d}{extension:\\.[a-z]+}") 
    public void handle(@PathVariable String version, @PathVariable String extension) { 
    // ... 
    } 
} 
1

Należy użyć:

@RequestMapping("/e{number:\\d+}) 
+2

edytowany odpowiedź usunąć odniesienie do „rozwiązania”, jak takie oświadczenie należy w komentarzu, a nie odpowiedź. Byłoby jednak dobrze, gdybyś wyjaśnił w swojej odpowiedzi (edytuj), co robi podany kod w odniesieniu do pytania. – trincot