Spring MVC 404, хотя URL-адрес сопоставлен - PullRequest
0 голосов
/ 01 июля 2018

Я пытался настроить контроллер Spring MVC, но когда я пытаюсь сделать запрос GET, я получаю ошибку 404.

Я создал рабочий тестовый пример здесь: https://github.com/Jardo-51/zk-spring-mvc-test

Когда я запускаю приложение на Tomcat и пытаюсь сделать запрос GET по адресу: http://localhost:8080/zk-spring-mvc-test/api/v0/foo, Я получаю ошибку 404, и в журналах говорится:

WARNING: No mapping found for HTTP request with URI [/zk-spring-mvc-test/api/v0/foo] in DispatcherServlet with name 'dispatcher-api'`

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

INFO: Mapped "{[/zk-spring-mvc-test/api/v0/foo],methods=[GET]}" onto public org.springframework.http.ResponseEntity<java.lang.String> com.jardoapps.zkspringmvctest.controllers.FooController.method()

Приложение использует ZK-фреймворк, которому нужны собственные сервлеты, поэтому, возможно, существует конфликт с DispatcherServlet. Пожалуйста, смотрите мой пример приложения для более подробной информации (он содержит только необходимый код).

Вот web.xlm (контекст Spring и конфигурация MVC находятся вверху).

Вот класс контроллера .

1 Ответ

0 голосов
/ 01 июля 2018

Просто замените @RequestMapping("zk-spring-mvc-test/api/v0/foo") на @RequestMapping("/v0/foo") в вашем FooController классе.

Причина в том, что путь, который вы указываете в аннотации @RequestMapping, является частью URL-адреса запроса за пределами части, которая вызвала сервлет.

Вы определили отображение DispatcherServlet как:

<servlet-mapping>
    <servlet-name>dispatcher-api</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>

Итак, у нас есть zk-spring-mvc-test, который является корневым контекстом (это зависит от развертывания), /api/, который вызывает Spring DispatcherServlet, и, наконец, /v0/foo, которые должны отображаться вашим контроллером:

@RestController
@RequestMapping("/v0/foo")
public class FooController {

    @RequestMapping(method = RequestMethod.GET)
    public ResponseEntity<String> method() {
        return ResponseEntity.ok().body("OK");
    }
}

Вы можете увидеть Spring MVC, конфигурирующий шаблон URL для получения дополнительной информации.

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