找不到 GET /api/keyservice/key 的映射
No mapping found for GET /api/keyservice/key
我正在创建一个 spring-rest-app。
这是我的调度程序配置(我还有一个包含 DataSource bean 的根配置)
@Configuration
@ComponentScan(basePackages= {"config", "cache", "dao", "entity", "exception", "rest", "service"})
@EnableWebMvc
public class DispatcherConfiguration {
@Bean
public KeyCache keyCache() {
return new KeyCacheImpl();
}
}
这是我的 webapp 初始化程序
public class TinyURLKeyServiceInitializor implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext appcontext = new AnnotationConfigWebApplicationContext();
appcontext.register(ConfigurationClass.class);
servletContext.addListener(new ContextLoaderListener(appcontext));
AnnotationConfigWebApplicationContext dispatchercontext = new AnnotationConfigWebApplicationContext();
dispatchercontext.register(DispatcherConfiguration.class);
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(dispatchercontext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
这是控制器
@Controller
@RequestMapping("/api/keyservice")
public class KeyServiceController {
@Autowired
private KeyService keyService;
@GetMapping(value="/key", produces="application/json")
@ResponseBody
public String getKey() {
return keyService.getKey();
}
}
当我启动 Web 应用程序并发送 - GET http://localhost:7080/api/keyservice/key
我在 DEBUG LOG
中得到以下信息
[INFO] Completed initialization in 1006 ms
May 17, 2020 11:56:10 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-7080"]
[DEBUG] GET "/api/keyservice/key", parameters={}
[WARNING] No mapping for GET /api/keyservice/key
[DEBUG] Completed 404 NOT_FOUND
我已经为注册字符串 MappingHandlers 添加了 @EnableMvc。但是他们仍然无法检测到端点和控制器方法之间的映射。
我在 DispatcherServlet.getHandler 中放置了一个调试点,但它每次都 returns 为空。有没有人遇到过类似的问题?
找到我命中的原因-
http://localhost:7080/api/keyservice/key
我的 pom.xml 有 -
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>7080</port>
<path>/api/keyservice</path>
</configuration>
</plugin>
我的控制器
@Controller
@RequestMapping("/api/keyservice")
public class KeyServiceController {
@Autowired
private KeyService keyService;
@GetMapping(value="/key", produces="application/json")
@ResponseBody
public String getKey() {
由于上下文路径 = /api/keyservice(由于 pom.xml 中的设置),spring 试图找到 /key 的映射。很明显,我的控制器中没有 /key 的映射。
删除了控制器 RequestMapping。它奏效了。
我正在创建一个 spring-rest-app。
这是我的调度程序配置(我还有一个包含 DataSource bean 的根配置)
@Configuration
@ComponentScan(basePackages= {"config", "cache", "dao", "entity", "exception", "rest", "service"})
@EnableWebMvc
public class DispatcherConfiguration {
@Bean
public KeyCache keyCache() {
return new KeyCacheImpl();
}
}
这是我的 webapp 初始化程序
public class TinyURLKeyServiceInitializor implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext appcontext = new AnnotationConfigWebApplicationContext();
appcontext.register(ConfigurationClass.class);
servletContext.addListener(new ContextLoaderListener(appcontext));
AnnotationConfigWebApplicationContext dispatchercontext = new AnnotationConfigWebApplicationContext();
dispatchercontext.register(DispatcherConfiguration.class);
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(dispatchercontext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
这是控制器
@Controller
@RequestMapping("/api/keyservice")
public class KeyServiceController {
@Autowired
private KeyService keyService;
@GetMapping(value="/key", produces="application/json")
@ResponseBody
public String getKey() {
return keyService.getKey();
}
}
当我启动 Web 应用程序并发送 - GET http://localhost:7080/api/keyservice/key 我在 DEBUG LOG
中得到以下信息[INFO] Completed initialization in 1006 ms
May 17, 2020 11:56:10 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-7080"]
[DEBUG] GET "/api/keyservice/key", parameters={}
[WARNING] No mapping for GET /api/keyservice/key
[DEBUG] Completed 404 NOT_FOUND
我已经为注册字符串 MappingHandlers 添加了 @EnableMvc。但是他们仍然无法检测到端点和控制器方法之间的映射。
我在 DispatcherServlet.getHandler 中放置了一个调试点,但它每次都 returns 为空。有没有人遇到过类似的问题?
找到我命中的原因-
http://localhost:7080/api/keyservice/key
我的 pom.xml 有 -
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>7080</port>
<path>/api/keyservice</path>
</configuration>
</plugin>
我的控制器
@Controller
@RequestMapping("/api/keyservice")
public class KeyServiceController {
@Autowired
private KeyService keyService;
@GetMapping(value="/key", produces="application/json")
@ResponseBody
public String getKey() {
由于上下文路径 = /api/keyservice(由于 pom.xml 中的设置),spring 试图找到 /key 的映射。很明显,我的控制器中没有 /key 的映射。
删除了控制器 RequestMapping。它奏效了。