使用泽西和灰熊启用JSON

时间:2015-02-11 19:26:51

标签: java json jersey jersey-2.0 grizzly

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

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

1 个答案:

答案 0 :(得分:15)

你正在使用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>

这种依赖性将吸引所需的杰克逊MessageBodyReader/MessageBodyWriter。然后只需配置它

resourceConfig.register(JacksonFeature.class);