Ошибка разбора JSON-параметра в Java REST

Недавно я обновил свой REST API для использования jersey 2.x, и теперь я не могу получить параметры тела JSON, как раньше, методы просто больше не вызывают. Я предполагаю, что мне не хватает зависимости для синтаксического анализа JSON-объекта java, но я не слишком уверен, что мне нужно добавить, любая помощь приветствуется.

pom.xml

<dependencies>
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.19</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>2.19</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>2.19</version>
    </dependency>
    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>2.22</version>
    </dependency>
</dependencies>

REST метод

@POST
    @Path("/users/{userId}/friends")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response followUser(@PathParam("userId") Integer myUserId, FollowUserBean user) {}

FollowUserBean.java

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class FollowUserBean {
    public Integer friendId;

    public FollowUserBean() {}
}
 cassiomolin10 авг. 2016 г., 09:17
Попробуйте использовать одну и ту же версию всех артефактов на Джерси.
 Justas10 авг. 2016 г., 09:02
Какое исключение вы получаете?

Ответы на вопрос(2)

Возможно, вам не хватает модуля поддержки провайдеров юридического лица JSON Jackson (2.x):

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.19</version>
    <scope>compile</scope>
</dependency>

Рекомендуется использовать одну и ту же версию Джерси во всех библиотеках.

Решение Вопроса
Вам нужен JSON-провайдер

На момент написания статьи Jersey 2.x интегрировался со следующими модулями для обеспечения поддержки JSON:

MoxyJava API для обработки JSON (JSON-P)ДжексонотделыватьсяИспользуя Джексона

Ниже приведены шаги, необходимые для использования Jackson в качестве JSON-провайдера для Jersey 2.x:

Добавление зависимостей модуля Джексона

Чтобы использовать Jackson 2.x в качестве вашего JSON-провайдера, вам нужно добавитьjersey-media-json-jackson модуль к вашемуpom.xml файл:

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.25.1</version>
</dependency>

Для использования Jackson 1.x это будет выглядеть так:

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson1</artifactId>
    <version>2.25.1</version>
</dependency>

Регистрация модуля Джексона

Помимо добавления зависимости, упомянутой выше, вам необходимо зарегистрироватьсяJacksonFeature (или жеJackson1Feature для Джексона 1.х) в вашемApplication / ResourceConfig подкласс:

@ApplicationPath("/api")
public class MyApplication extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> classes = new HashSet<Class<?>>();
        classes.add(JacksonFeature.class);
        return classes;
    }
}
@ApplicationPath("/api")
public class MyApplication extends ResourceConfig {

    public MyApplication() {
        register(JacksonFeature.class);
    }
}

Если у вас нетApplication / ResourceConfig подкласс, вы можете зарегистрироватьJacksonFeature в вашемweb.xml дескриптор развертывания. Конкретные имена классов ресурсов, поставщиков и функций могут быть предоставлены взначение через запятую изjersey.config.server.provider.classnames параметр инициализации.

<init-param>
    <param-name>jersey.config.server.provider.classnames</param-name>
    <param-value>org.glassfish.jersey.jackson.JacksonFeature</param-value>
</init-param>

MessageBodyWriter предоставленный ДжексономJacksonJsonProvider.

Для более подробной информации, проверьте Джерсидокументация о поддержке общих представлений медиа типа.

 beerye10 авг. 2016 г., 12:57
Спасибо за ответ, у меня нет подкласса Application / ResourceConfig, не нужен ли jersey 1.x такой файл для регистрации провайдера JSON?
 cassiomolin10 авг. 2016 г., 13:04
@beerye Вы должны создатьApplication/ResourceConfig суб-класс. Для получения более подробной информации, ознакомьтесь с документацией оразвертывание, В Джерси 1.х,эта функция может быть включена вweb.xml файл.

Ваш ответ на вопрос