Я провел дни, пытаясь понять это. Все, что я хочу сделать, это создать простой веб-сервис, чтобы возвращать списки POJO как JSON. Почему это так сложно?Как создать простой веб-сервис JSON Jersey 2.x RESTful на Glassfish 4?
Я начинаю с этим в моей POM:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.17</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.17</version>
</dependency>
Вот мой ResourceConfig:
@ApplicationPath("reservations")
public class ApplicationConfig extends ResourceConfig {
public ApplicationConfig() {
packages("com.oracle.swr.ws.mavenproject3",
"com.fasterxml.jackson.jaxrs.base");
}
}
Вот мой сайт:
@Path("/bookedAssets")
public class GenericResource {
@Context
private UriInfo context;
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<String> getJson() {
List<String> strings = new ArrayList<>();
strings.add("test");
strings.add("test2");
return strings;
}
}
Когда я пытаюсь запустить я получаю:
Суровый: MessageBodyWriter не найден для типа media = application/json, type = class java.util.ArrayList, genericType = class java.util.ArrayList.
Я изменил мой ResourceConfig, чтобы попытаться использовать JacksonFeature:
public ApplicationConfig() {
super(GenericResource.class, JacksonFeature.class);
}
И я получаю сообщение об ошибке:
Предупреждение: StandardWrapperValve [com.oracle.swr.ws.mavenproject3.ApplicationConfig] : Servlet.service() для сервлета com.oracle.swr.ws.mavenproject3.ApplicationConfig выбрал исключение org.jboss.weld.exceptions.UnsatisfiedResolutionException: WELD-001308: невозможно разрешить любые компоненты для типов: [org.glassfish.jersey .message.filtering.spi.ObjectProvider]; Привязки: [QualifierInstance {annotationClass = interface javax.enterprise.inject.Default, values = {}, hashCode = 633679645}]
Я пробовал много разных комбинаций вещей в моей POM. Не повезло. Я прочитал документацию в Джерси. Не повезло.
Этот парень говорит, что документация Джерси - это дерьмо, а вместо этого: http://jersey.576304.n2.nabble.com/Beware-of-JacksonFeature-in-Jersey-td7581633.html. Пробовал. Не повезло.
Есть ли у кого-нибудь действительно простой пример получения GF 4.x, Jersey 2.x, Jackson 2.x?
Попробуйте поставить jackson как 'provided' также. Glassfish поставляется с этим модулем. Я думаю, что модуль зависит от других модулей, которые могут быть противоречивыми в версиях. –
@peeskillet Я добавил «предоставил», и это, к сожалению, не изменило ситуацию. – wsaxton
Попробуйте избавиться от 'jersey-json-media-jackson', добавьте [этот] (https://github.com/FasterXML/jackson-jaxrs-providers) и зарегистрируйте пакет' com.fasterxml.jackson .jaxrs.json' и посмотреть, что произойдет –