面临一个我不明白从 =( 我有一个简单的 REST 服务应用程序。我在服务类中使用 Spring @Autowired 时我必须将它与 Spring 部分集成的问题。
网页.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>RESTful service</display-name>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- RESTful web-service -->
<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>training.rest.service</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-servlet</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>
<!-- SPRING CONTEXT -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/springServlet/appServlet/mvc-servlet.xml,
/WEB-INF/db/db-cfg.xml,
/WEB-INF/springServlet/application-security.xml
</param-value>
</context-param>
<!-- SPRING SECURITY -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- other -->
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
通过这样的 web.xml 配置,我可以使用返回 JSON 格式对象的服务方法,例如:
@GET
@Path("/get")
@Produces(MediaType.APPLICATION_JSON)
public User readUser() {
User user = new User();
user.setLogin("login QQ");
user.setPassword("passw QQ");
return user;
}
但如果我想使用类似的方法:
@GET
@Path("{login}")
@Produces(MediaType.APPLICATION_JSON)
public User readUser(@PathParam("login") String login) throws SQLException {
User user = userDao.findByLogin(login);
return user;
}
我需要在该服务类中自动装配 userDao。但是,如果我将 web.xml 中的 Servlet Dispatcher 从
com.sun.jersey.spi.container.servlet.ServletContainer
至
com.sun.jersey.spi.spring.container.servlet.SpringServlet
但在这种情况下,如果我尝试以以前的方式获取 JSON,我会得到:内部服务器错误和
Caused by: com.sun.jersey.api.MessageException: A message body writer for Java class training.rest.entity.User, and Java type class training.rest.entity.User, and MIME media type application/json was not found
... 52 more
所以不会对应用程序的任何其他部分进行任何更改。我刚刚更改了 servlet 调度程序。当然我在 context.xml 中有 bean 描述。
任何提示将不胜感激。抱歉,如果我错过任何重要信息,我是新来的提问者,不想让信息泛滥 =)