Spring 3.0 множественная проблема @ PathVariable - PullRequest
3 голосов
/ 11 августа 2011

В моем приложении мне нужно сравнить 3 продукта, для которых в моем контроллере я отображал запрос как

@RequestMapping(value = "/products/{proId1}Vs{proId2}Vs{proId3}", method = RequestMethod.GET)
public ModelAndView compareThreeProducts(@PathVariable("proId1") int id1, @PathVariable("proId2") int id2, @PathVariable("proId3") int id3)
{
   //someLogic

при попадании на мой URL (http://something/products/12Vs13Vs14)

Я получаю ошибку http 400

Я также пытался 2 @pathVariable, как

@RequestMapping(value = "/products/{proId1}Vs{proId2}", method = RequestMethod.GET)
public ModelAndView compareTwoProducts(@PathVariable("proId1") int id1, @PathVariable("proId2") int id2) 

, это работает нормально, но почему я сталкиваюсь с проблемой с 3 переменными, а также нет ошибок в журнале сервера, то как найти то, чтоошибка.

любое решение ??

Ответы [ 3 ]

3 голосов
/ 27 октября 2011

Как насчет явного указания регулярного выражения, которое вы хотите, чтобы каждая переменная пути соответствовала, как описано здесь ?

@RequestMapping(value = "/products/{proId1:\d+}Vs{proId2:\d+}Vs{proId3:\d+}", method = RequestMethod.GET)

1 голос
/ 11 августа 2011

Вы можете попробовать объединить все в одну переменную пути, а затем проанализировать ее вручную:

@RequestMapping(value = "/products/{compareIdString}", method = RequestMethod.GET)
public ModelAndView compareThreeProducts(@PathVariable("compareIdString") String compareIdString)
{
    // split compareIdString on "Vs"
    // parse each resulting value to an int

Это скорее обходной путь, чем решение. Возможно, вы захотите выполнить отладку в коде Spring, как предложил Божо, если вы хотите попытаться выяснить, что именно идет не так.

0 голосов
/ 11 августа 2011
  • убедитесь, что проблема не в ответе - установите точку останова в методе и посмотрите, вызывается ли она
  • проверьте файлы журнала на наличие признаков
  • попробуйте использовать косую чертуразделитель /products/{p1}/{p2}/{p3} или /products/{p1}/vs/{p2}/vs/{p3}
...