从jeJSrsey Rest Service返回JSON对象

时间:2013-07-13 19:42:35

标签: json rest jersey

我有一个返回JSONObjects和JSONArrays的休息服务

我想回来

import org.codehaus.jettison.json.JSONArray; import org.codehaus.jettison.json.JSONObject;

来自我的Rest服务。

前:

 @Path("/SubgraphIds")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public JSONArray getSubgraphIds() {

       .......

    }

    @Path("/Subgraph/id={id}/startTime={startTime}/duration={duration}")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public JSONObject getSubgraph(@PathParam("id")String id ,@PathParam("startTime")String startTime ,
                              @PathParam("duration")String duration) {

    }

在我的应用程序中,我使用com.sun.jersey.api.container.httpserver在应用程序内部启动我自己的休息服务

/ **              *开始服务              * /             this.resourceConfig = new PackagesResourceConfig(restPkg);

        resourceConfig.getFeatures().put(ClientConfig.FEATURE_DISABLE_XML_SECURITY, true);
        resourceConfig.getProperties().put(ClientConfig.FEATURE_DISABLE_XML_SECURITY, "true");
        resourceConfig.getClasses().add(JSONArrayProvider.class);
        resourceConfig.getClasses().add(JSONArrayProvider.class);
        this.httpServer = HttpServerFactory.create(getURL(port), resourceConfig);

但启动服务器时出现以下错误。任何解决这个问题的想法都非常感谢。 (我使用的是jersey-core,jersey-server,jersey-json 1.1.1-ea版本。)

SEVERE:无法实例化提供程序类com.sun.jersey.json.impl.provider.entity.JSONArrayProvider。处理将继续,但不会使用该课程 java.lang.IllegalAccessException:类com.sun.jersey.core.spi.component.ComponentConstructor无法使用修饰符“”访问类com.sun.jersey.json.impl.provider.entity.JSONArrayProvider的成员     at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:95)     at java.lang.Class.newInstance0(Class.java:368)     在java.lang.Class.newInstance(Class.java:327)     在com.sun.jersey.core.spi.component.ComponentConstructor。 getInstance(ComponentConstructor.java:152)     at com.sun.jersey.core.spi.component.ComponentConstructor.getInstance(ComponentConstructor.java:140)     在com.sun.jersey.core.spi.component.ProviderFactory。 _getComponentProvider(ProviderFactory.java:159)     at com.sun.jersey.core.spi.component.ProviderFactory._getComponentProvider(ProviderFactory.java:152)     在com.sun.jersey.core.spi.component.ProviderFactory.getComponentProvider(ProviderFactory.java:146)     at com.sun.jersey.core.spi.component.ProviderFactory.getComponentProvider(ProviderFactory.java:124)     at com.sun.jersey.core.spi.component.ProviderServices.getComponent(ProviderServices.java:190)     在com.sun.jersey.core.spi.component.ProviderServices.getProvidersAndServices(ProviderServices.java:120)     在com.sun.jersey.core.spi.factory.MessageBodyFactory.initReaders(MessageBodyFactory.java:153)     在com.sun.jersey.core.spi.factory.MessageBodyFactory.init(MessageBodyFactory.java:145)     at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:609)     在com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:168)     在com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:130)     在com.sun.jersey.api.container.httpserver.HttpServerFactory.create(HttpServerFactory.java:169)

1 个答案:

答案 0 :(得分:1)

删除

resourceConfig.getClasses().add(JSONArrayProvider.class);

代码中的行。 JSONObjectJSONArray的提供商可通过META-INF\services机制自动找到。使用这些Jettison类所需要做的就是将jersey-json.jarjettison.jar放在类路径上。