У меня есть простой PingController, определенный следующим образом:
package org.example.tricol.controllers;
import org.example.tricol.utils.Console;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PingController {
public PingController() {
Console.header("PingController initialized");
}
@GetMapping("/ping")
public String ping() {
return "pong";
}
Журналы показывают, что Spring правильно отображает /ping, но когда я пытаюсь получить к нему доступ через браузер или Curl, я получаю сообщение 404 Not Found.
Настройка проекта
- Построено с помощью Spring Core + MVC, без Spring Boot
- Развернуто на Tomcat 10
- Проект упакован как .war
- Путь к контексту: /tricol
- IntelliJ используется в качестве IDE
- Файл web.xml отсутствует (я использую конфигурацию на основе Java)
WebAppInitializer.java
package org.example.tricol.config;
import org.example.tricol.utils.Console;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
public WebAppInitializer() {
Console.header("WEB APP INITIALIZER");
}
@Override
protected Class[] getRootConfigClasses() {
return new Class[] { AppConfig.class, DataSourceConfig.class };
}
@Override
protected Class[] getServletConfigClasses() {
return new Class[] { WebMvcConfig.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
AppConfig.java
package org.example.tricol.config;
import org.example.tricol.utils.Console;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@ComponentScan(basePackages = "org.example.tricol")
@EnableJpaRepositories(basePackages = "org.example.tricol.repositories")
@EnableTransactionManagement // enable @Transactional
public class AppConfig {
public AppConfig() {
Console.header("TRICOL FOURNISSEURS MANAGEMENT - APP CONFIG");
}
}
WebMvcConfig
package org.example.tricol.config;
import org.example.tricol.utils.Console;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@EnableWebMvc
public class WebMvcConfig {
public WebMvcConfig() {
Console.header("WEB MVC CONFIGURATION");
}
}
Вопрос
Почему мой маршрут /ping по-прежнему возвращает 404, хотя Spring показывает, что он сопоставлен?
Что-то не так с моей конфигурацией или настройкой развертывания (контекст Tomcat, .war или сопоставление сервлетов)?
Я уверен, что проблема возникла из-за отсутствие понимания процесса загрузки приложения или процесса обработки маршрутов.
Изменить:
--------------------------------------------------
09:24:47.045 [RMI TCP Connection(2)-127.0.0.1] INFO org.example.tricol.utils.Console -- >>> PINGCONTROLLER INITIALIZED
Подробнее здесь: https://stackoverflow.com/questions/797 ... pring-boot
Мобильная версия