0

面临一个我不明白从 =( 我有一个简单的 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 描述。

任何提示将不胜感激。抱歉,如果我错过任何重要信息,我是新来的提问者,不想让信息泛滥 =)

4

2 回答 2

1

看看Genson,它提供了与球衣的开箱即用集成,只需将 jar 放入您的类路径中,瞧。

于 2013-08-01T16:31:16.357 回答
0

好的,这就是解决方案:我只需要用 @JsonRootName(value = "user") 注释我的 User 类

于 2013-08-02T09:36:55.713 回答