spring-mvc: как отобразить шаблоны URI в форме "a / b / {c}"? - PullRequest
2 голосов
/ 16 ноября 2010

Я могу получить шаблон URI в форме "/ a / b" или "/ a / {b}" для работы.Но когда я пытаюсь «/ a / b / {c}», я получаю HTTP 404 и сообщение в журнале в форме «Не найдено сопоставление для HTTP-запроса с URI [/ myapp / a / b / c]... "Но я также вижу это сообщение в журнале, которое наводит меня на мысль, что сопоставления верны ...?

INFO: Mapped URL path [/a] onto handler 'AController'
Nov 16, 2010 12:18:39 PM org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
INFO: Mapped URL path [/a/*] onto handler 'AController'
Nov 16, 2010 12:18:39 PM org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler

Я заметил все примеры в документах spring-mvc показать шаблоны URI в форме "/ a / {b}" или / a / {b} / c / {d} ". Так что" / a / b / {c} "невозможно? Есть ли что-нибудьМне нужно настроить в web.xml, чтобы это произошло? Или может какая-то (неправильная) конфигурация помешает отображению этого шаблона? В настоящее время мой сервлет диспетчера сопоставлен с:

<url-pattern>/</url-pattern>

Контроллер выглядит следующим образом:

@Controller
public class AController {
    @RequestMapping(value = "/a/b/{c}", method = RequestMethod.GET)
    public ModelAndView show() {
        ModelAndView modelAndView = new ModelAndView("A");
        return modelAndView;
    }
}

Доступ к http://localhost:8080/myapp/a/b/c возвращает 404, и я вижу это в журнале:

Nov 16, 2010 12:19:06 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/myapp/a/b/c] in DispatcherServlet with name 'dispatcher'

Есть какие-нибудь идеи о том, как получить шаблон URI для правильного отображения?

Ответы [ 2 ]

2 голосов
/ 16 ноября 2010

Похоже, что это происходит только тогда, когда ControllerClassNameHandlerMapping используется в качестве отображения обработчика.

Аннотированные контроллеры обычно используются с DefaultAnnotationHandlerMapping, и в этом случае все работает нормально.

EDIT: На самом деле, это выглядит как законное поведение ControllerClassNameHandlerMapping. Он сопоставляет aController с /a/*, а не /a/**, поэтому допускается только один уровень иерархии путей. И снова, если вам нужна полная гибкость, используйте DefaultAnnotationHandlerMapping.

0 голосов
/ 16 ноября 2010

вы можете попробовать ниже,

@ RequestMapping (значение = "/ a / b / {c}", метод = RequestMethod.GET)

public ModelAndView show(@PathParam("c") String c) {

    ModelAndView modelAndView = new ModelAndView("A");

    return modelAndView;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...