无法初始化类org.springframework.web.context.request.ServletRequestAttributes

问题描述:

我想创建一个使用Spring 4的休息控制器。我也使用MongoDB作为数据库,Tomcat 7作为Web服务器。 我收到此错误消息当我尝试提交任何REST请求:无法初始化类org.springframework.web.context.request.ServletRequestAttributes

type Exception report 

message Servlet execution threw an exception 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

javax.servlet.ServletException: Servlet execution threw an exception 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
root cause 

java.lang.NoClassDefFoundError: Could not initialize class org.springframework.web.context.request.ServletRequestAttributes 
    org.springframework.web.servlet.FrameworkServlet.buildRequestAttributes(FrameworkServlet.java:996) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:923) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:620) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.56 logs. 

我使用这些版本在我的pom.xml

<!-- Web --> 
    <jsp.version>2.2</jsp.version> 
    <jstl.version>1.2</jstl.version> 
    <servlet.version>2.5</servlet.version> 

    <!-- Spring --> 
    <spring-framework.version>4.0.0.RELEASE</spring-framework.version> 

    <!-- spring-web --> 
    <spring-web.version>4.1.2.RELEASE</spring-web.version> 

    <!-- Spring data for MongoDB --> 
    <springframework.data-version>1.6.1.RELEASE</springframework.data-version> 

这里是控制器类that'm使用:

@RestController 
@RequestMapping("/rest/user") 
public class UserContoller { 

    @Autowired 
    UserServices userServices; 

    @RequestMapping(value = "/{username}", method = RequestMethod.GET) 
    public @ResponseBody User findUserByUsername(@PathVariable ("username") String username){ 
     return userServices.findUserByUsername(username); 

    } 

} 

你能帮我吗? 预先感谢您

我固定它是这样的:

@RequestMapping(value = "/user", method = RequestMethod.GET, produces = "application/json") 
@ResponseBody 
public User findUsername(@RequestParam("username") String username) { 
    logger.info("Searcing for user using his username"); 
    return userServices.findUserByUsername(username); 
} 

我也有类似的问题,我相信的东西的结合解决了这个问题: (仍在学习春天的来龙去脉跟我这么裸露的,如果我增加额外的不必要的物品)

  • 请确保您有以下两行中的servlet.xml文件和顺序(意为注解驱动必须在默认的servlet处理程序之前上市)

<mvc:annotation-driven /> 

<mvc:default-servlet-handler /> 

<bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/"></property> 
    <property name="suffix" value=".jsp"></property> 
</bean> 

*任何等价的ViewResolver bean是罚款。

  • 确认这是在你的web.xml:

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

  • 我看你不提你得到什么会产生。例如:我在@RequestMapping中拥有这个属性produces = MediaType.APPLICATION_JSON_VALUE

  • 最后,我不确定为什么,但每次添加新的控制器映射时,都需要运行Maven Install生命周期,否则它不会看到新的映射。这个问题我仍然试图找出。