Включение JSON с использованием джерси и гризли

Я играю с Джерси, размещенным на 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();
    }
}

person li-raz    schedule 11.02.2015    source источник


Ответы (1)


Вы используете Джерси 2. В Джерси 2 нет com.sun.jersey.api.json.POJOMappingFeature и com.sun.jersey.config.property.packages, поэтому вы можете избавиться от них.

Чтобы включить JSON в/из POJO, нам нужен MessageBodyWriter/MessageBodyReader (подробнее см. здесь< /а>). К счастью, нам не нужно писать их самим. Вам просто нужна зависимость (см. здесь).

<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);
person Paul Samsotha    schedule 12.02.2015
comment
Бог знает, почему Джерси продолжает менять имена своих методов и почему это не считается лучшим ответом... работает как шарм. Спасибо. - person thermz; 28.04.2015
comment
Я создал архетип приложения для майки с помощью Jersey 2.27. Вы можете включить json, добавив (раскомментировав) зависимость Maven org.glassfish.jersey.media:jersey-media-json-binding, и вам даже не нужно регистрировать программу чтения/записи. - person Henno Vermeulen; 03.08.2018