Nano Hash - криптовалюты, майнинг, программирование

Не удается включить поддержку привязки JSON на основе POJO для Джексона в Джерси 2.0

Я использую Jersey для создания JSON (с сопоставлением POJO через Jackson) и Jetty (начиная с основного метода).
Он отлично работает для Jersey 1.x.:

ServletHolder sh = new ServletHolder(ServletContainer.class);
sh.setInitParameter("com.sun.jersey.config.property.resourceConfigClass",
                        "com.sun.jersey.api.core.PackagesResourceConfig");
sh.setInitParameter("com.sun.jersey.config.property.packages", "service");
sh.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true");
...
context.addServlet(sh, "/rest/*");
Server server = new Server(8080);
server.setHandler(context);
server.start();

Теперь я перенес свой проект на Джерси 2.0 и не смог включить в нем привязку JSON на основе POJO, я получаю следующее: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class business.entity.ExampleEntity, genericType=class business.entity.ExampleEntity.

Очевидно, что com.sun.jersey.api.json.POJOMappingFeature больше не действует, так как Джерси становится org.glassfish.

В документации говорится следующее:

Чтобы использовать Jackson в качестве поставщика JSON (JAXB/POJO), вам необходимо зарегистрировать JacksonFeature и ContextResolver для ObjectMapper (при необходимости) в вашем Configurable (клиент/сервер).

Но я не могу понять, как это сделать правильно в моем случае.

Я создал небольшой проект для этого вопроса:

ветка master - рабочий пример для Джерси 1.17.1;

ветка jersey-2.0-migration - не работает попытка перехода на Джерси 2.0 - проверка не удалась;

ветка jersey-2.0-migrate-client-only - нерабочая попытка использовать клиент Джерси 2.0 с работающим сервером Джерси 1.17.1 - проверка не удалась.

Вопрос: как включить привязку JSON на основе POJO в Джерси 2.0

07.07.2013

Ответы:


1

Документация немного устарела. Последняя сборка Jackson предоставляет автоматически обнаруживаемый провайдер. Добавьте следующие jar-файлы в путь к классу:

1) Джексон-аннотации-2.2.2.jar

2) Джексон-ядро-2.2.2.jar

3) Джексон-привязка данных-2.2.2.jar

4) jackson-jaxrs-base-2.2.1.jar

5) джексон-jaxrs-json-провайдер-2.2.1.jar

6) jackson-module-jaxb-аннотации-2.2.2.jar

Обязательно добавьте «com.fasterxml.jackson.jaxrs.json» в свойство конфигурации сервлета «jersey.config.server.provider.packages», чтобы можно было автоматически обнаружить провайдера JSON Джексона.

09.07.2013
  • Это сработало для меня! Большое спасибо! Я добавил две новые ветки в свой небольшой проект на GitHub jersey-2.0-migrate-server-success и jersey-2.0-migration-success они описывают решение и оно прошло проверку! 09.07.2013
  • Я также работаю с jersey-media-json-jackson 2.0 (см. обновление в jersey-2.0-migration), но без jersey-client 2.0 он получает предупреждения, подобные упомянутым в комментариях. 10.07.2013
  • Прошли часы мучений. Мокси молча терпел неудачу, и мне пришлось вернуться к Джексону, и я был готов просунуть голову в окно. Спасибо за этот ответ. 28.08.2013
  • Должен ли он также работать для майки 2.1.3, которая является последней стабильной версией? 03.10.2013
  • Посетите github.com/FasterXML/jackson-jaxrs-providers, чтобы получить простой в использовании maven зависимость 01.11.2013
  • Когда я это делаю, он случайным образом использует либо JacksonJsonProvider, либо JacksonJaxbJsonProvider. Я использую аннотации JAXB, поэтому, если случается использовать JacksonJsonProvider, он их игнорирует, и мое приложение ломается. Каков правильный способ принудительного использования JacksonJaxbJsonProvider? 20.11.2013
  • Я боролся часами, пока не заработал, прочитав ваш пост. Спасибо! 25.07.2014

  • 2

    Мне лично понравился комментарий / ответ @jontro ... поэтому я собираюсь повторно опубликовать его как ответ, а не комментарий, чтобы люди его не пропустили (надеюсь, это нормально).

    Взгляните на https://github.com/FasterXML/jackson-jaxrs-providers. где есть новые провайдеры jackson jaxrs (из проекта jackson, а не из проекта джерси).

    Обратите внимание, что это приводит к зависимостям Jackson2 (jackson-core-2.2.3.jar и т. д.), а не к зависимостям Jackson1, которые вводит jersey-media-json-jackson (jackson-core-asl-1.9.13.jar и т. д.).

    Для моего проекта maven с использованием джерси 2.5 это означает:

    Удалите зависимость:

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

    Добавьте зависимость:

    <dependency>
      <groupId>com.fasterxml.jackson.jaxrs</groupId>
      <artifactId>jackson-jaxrs-json-provider</artifactId>
      <version>2.2.3</version>
    </dependency>
    

    Спасибо @user2562639 и @jontro.

    19.01.2014
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..