0

我是 JAX-RS 的新手。我正在尝试将 List 表示为 JSON 数组:

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/getUsersResource/{userId}")
public List<AbstractResource> getUsersResources(@PathParam("userId") final String userId) {
    if (userId == null) {
        return null;
    }

    User user = null;

    try {
        user = userDao.getUserById(Integer.parseInt(userId));
    } catch (NumberFormatException nfe) {
        user = userDao.getUser(userId);
    }

    if (user == null) {
        return null;
    }

    return abstractResourceDao.getUsersResources(null, user.userId);
}

当我执行此网址时,我得到:

{“异常”:{“名称”:“WebApplicationException”}}

我只用@XmlRootElement 注释了我的AbstractResource 类,当我将@Produces 注释参数更改为

@Produces(MediaType.APPLICATION_XML)

我得到了正确的结果。这是我的 web.xml:

<servlet>
    <servlet-name>REST Application</servlet-name>
    <servlet-class>org.apache.wink.server.internal.servlet.RestServlet</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.balthaser.b3e.rest.RESTApplication</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet>
    <servlet-name>REST Client</servlet-name>
    <servlet-class>com.balthaser.b3e.rest.client.RESTClient</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
    <servlet-mapping>
    <servlet-name>REST Client</servlet-name>
    <url-pattern>/rest/index.html</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>REST Application</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

生成 JSON 数组时是否有任何其他要求?

4

1 回答 1

0

Apache Wink 使用 json.org 和 jettison 作为 Json 提供程序,它们无法正确处理 Java List。因此,您需要将 Wink 配置为使用 Jackson 作为 Json 提供程序。

这是细节。

http://www.ibm.com/developerworks/java/library/wa-aj-jackson/index.html

于 2012-10-30T02:35:03.357 回答