【问题标题】:Enabling JSON using jersey and grizzly使用 jersey 和 grizzly 启用 JSON
【发布时间】:2015-04-12 07:47:21
【问题描述】:

我正在玩由 Grizzly 托管的 Jersey,并希望能够使用和生成 JSON,但是我在获取请求和 POST 中不支持的媒体类型中从服务器获得 500 我的服务器代码是

org.glassfish.jersey.server.ResourceConfig rc = new ResourceConfig();
    rc.packages("RestServer.controllers");

    final Map<String, Object> initParams = new HashMap<String, Object>();
    initParams.put("com.sun.jersey.config.property.packages", "rest");
    initParams.put("com.sun.jersey.api.json.POJOMappingFeature", "true");

    rc.addProperties(initParams);

    webServer = GrizzlyHttpServerFactory.createHttpServer(uri, rc, false);

我的 POJO 是:

@XmlRootElement
public class Dummy {

    private int id;
    private String name;

    public Dummy(int id, String name) {
        this.id = id;
        this.name = name;
    }

    @XmlElement(name="id")
    public int getId() {
        return id;
    }

    @XmlElement(name = "name")
    public String getName() {
        return name;
    }
}

和控制器

@Path("/Dummies")
public class DummyController {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response get() {
        System.out.println("Get");
        return Response.status(Status.OK)
            .entity(new Dummy(-1, "hello"))
            .build();
    }

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public Response AddDummy(Dummy dummy) {
        return Response.status(Status.CREATED).entity(dummy).build();
    }
}

【问题讨论】:

    标签: java json jersey jersey-2.0 grizzly


    【解决方案1】:

    您正在使用 Jersey 2。在 Jersey 2 中,没有com.sun.jersey.api.json.POJOMappingFeaturecom.sun.jersey.config.property.packages,因此您可以摆脱它们。

    要启用与 POJO 之间的 JSON,我们需要一个 MessageBodyWriter/MessageBodyReader(查看更多 here)。幸运的是,我们不需要自己编写这些。您只需要一个依赖项(请参阅here)。

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>${jersey2.version}</version>
    </dependency>
    

    这种依赖将引入所需的 Jackson MessageBodyReader/MessageBodyWriter。然后就配置好了

    resourceConfig.register(JacksonFeature.class);
    

    【讨论】:

    • 上帝知道为什么 Jersey 不断更改他们的方法名称,以及为什么这不被接受为最佳答案......就像一个魅力。谢谢。
    • 我使用 Jersey 2.27 创建了一个原型球衣应用程序。您可以通过添加(取消注释)Maven 依赖项 org.glassfish.jersey.media:jersey-media-json-binding 来启用 json,甚至不必注册读取器/写入器。
    猜你喜欢
    • 1970-01-01
    • 2014-02-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多