无法初始化类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生命周期,否则它不会看到新的映射。这个问题我仍然试图找出。