Spring 3.2.4 Servlet 配置错误 -- 控制器未捕获 URL



我正在尝试重构当前正在使用 CXFServlet 的应用程序,以将调度程序 servlet 用于 REST API 请求。

我在web中创建了一个servlet和servlet映射.xml:

<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,找到了事件控制器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'

我已经浏览了其他几篇带有此错误的帖子,但尚未找到解决方案。

谢谢。

Ok 终于想通了——@GET和@Path注释对于 CFXServlet 实现是正确的,但对于香草 Spring 来说则不然,我需要将注释更改为 @RequestMapping(value="/{eventId}",method=RequestMethod.GET),然后一切正常。我最终还将控制器注释更改为@RestController,但它与以前的注释配合得很好。

最新更新