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);
}

この URL を実行すると、次のようになります。

{"例外": {"名前": "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 を適切に処理できません。そのため、Json プロバイダーとして代わりに Jackson を使用するように Wink を構成する必要があります。

詳細はこちら。

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

于 2012-10-30T02:35:03.357 に答える