Spring 3.2.4 Servlet 配置错误 -- 控制器未捕获 URL
Spring 3.2.4 Servlet Configuration Error -- Controller not catching URL
我正在尝试重构当前正在使用 CXFServlet 的应用程序,以便将调度程序 servlet 用于 REST api 请求。
我在 web.xml 中创建了一个 servlet 和 servlet 映射:
<servlet>
<servlet-name>api</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>api</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
然后我创建了一个 api-servlet.xml:
<context:component-scan base-package="org.myapp.api"></context:component-scan>
<context:annotation-config/>
<tx:annotation-driven/>
<mvc:annotation-driven />
最后我在合适的包中创建了一个新的控制器:
@Controller("eventsController")
@RequestMapping("/api/events")
public class EventsController {
private static final Logger LOGGER = LogUtils.getLogger();
@GET
@Path("/{eventId}")
public EventDto getEvent(@PathParam("eventId") Long eventId) {
//do controller stuff
}
@GET
@Path("/")
public List<EventDto> getEvents() {
//do controller stuff
}
}
应用程序启动正常,我初始化了 servlet 并找到了 eventsController bean,我没有收到任何错误。但是,在尝试到达其余端点时,我收到错误消息:
Apr 17, 2015 11:02:27 AM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/api/events/42] in DispatcherServlet with name 'api'
我已经查看了其他几个出现此错误的帖子,但尚未找到解决方案。
谢谢。
好吧,终于弄明白了——@GET 和@Path 注释对于 CFXServlet 实现是正确的,但对于 vanilla Spring,我需要将注释更改为 @RequestMapping(value="/{ eventId}", method=RequestMethod.GET) 然后一切正常。我也最终将控制器注释更改为@RestController,但它与以前的注释一起工作得很好。
我正在尝试重构当前正在使用 CXFServlet 的应用程序,以便将调度程序 servlet 用于 REST api 请求。
我在 web.xml 中创建了一个 servlet 和 servlet 映射:
<servlet>
<servlet-name>api</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>api</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
然后我创建了一个 api-servlet.xml:
<context:component-scan base-package="org.myapp.api"></context:component-scan>
<context:annotation-config/>
<tx:annotation-driven/>
<mvc:annotation-driven />
最后我在合适的包中创建了一个新的控制器:
@Controller("eventsController")
@RequestMapping("/api/events")
public class EventsController {
private static final Logger LOGGER = LogUtils.getLogger();
@GET
@Path("/{eventId}")
public EventDto getEvent(@PathParam("eventId") Long eventId) {
//do controller stuff
}
@GET
@Path("/")
public List<EventDto> getEvents() {
//do controller stuff
}
}
应用程序启动正常,我初始化了 servlet 并找到了 eventsController bean,我没有收到任何错误。但是,在尝试到达其余端点时,我收到错误消息:
Apr 17, 2015 11:02:27 AM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/api/events/42] in DispatcherServlet with name 'api'
我已经查看了其他几个出现此错误的帖子,但尚未找到解决方案。
谢谢。
好吧,终于弄明白了——@GET 和@Path 注释对于 CFXServlet 实现是正确的,但对于 vanilla Spring,我需要将注释更改为 @RequestMapping(value="/{ eventId}", method=RequestMethod.GET) 然后一切正常。我也最终将控制器注释更改为@RestController,但它与以前的注释一起工作得很好。