Довольно странная проблема.Я перепробовал все варианты, которые нашел в Stackoverflow, но ни один из них не работает.
Проблема в том, что у меня есть веб-сервис REST, разработанный с использованием Jetty, и он возвращает список моих объектов в формате JSON.
Объект, который я возвращаю, выглядит следующим образом:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Spot {
@JsonProperty("id")
@JsonInclude(Include.NON_NULL)
private String id;
@JsonProperty("presenceStatus")
private boolean status;
@JsonProperty("longitude")
private double longitude;
@JsonProperty("latitude")
private double latitude;
public Spot() {
}
public Spot(String id, String status, double longitude,
double latitude) {
setId(id);
setStatus(status);
setLongitude(longitude);
setLatitude(latitude);
}
// Setters and Getters
}
И сервисные функции, оба возвращающие ArrayList
или Ответ, основанный на GenericList
:
@GET
@Path("listArray")
@Produces(MediaType.APPLICATION_JSON)
public List<Spot> getListArray() {
List<Spot> spots = functionRetrievingStuf();
return spots;
}
@GET
@Path("listResponse")
@Produces(MediaType.APPLICATION_JSON)
public Response getListResponse() {
List<Spot> spots = functionRetrievingStuf();
GenericEntity<List<Spot>> result =
new GenericEntity<List<Spot>>(spots) {
};
return Response.ok(result).build();
}
My POMфайловые зависимости:
<properties>
<jetty.version>9.4.12.v20180830</jetty.version>
<jersey.version>2.27</jersey.version>
</properties>
<dependencies>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-jetty-servlet</artifactId>
<version>${jersey.version}</version>
<scope></scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-common</artifactId>
<version>${jersey.version}</version>
</dependency>
<!-- Starting from Jersey 2.26, Jersey removed HK2 as a hard dependency.
It created an SPI as an abstraction for the dependency injection provider,
in the form of InjectionManager and InjectionManagerFactory. So for Jersey
to run, we need to have an implementation of the InjectionManagerFactory.
There are two implementations of this, which are for HK2 and CDI. The HK2
dependency is the jersey-hk2 others are talking about. -->
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>${jersey.version}</version>
</dependency>
</dependencies>
При разработке и запуске приложения в Eclipse в Windows все работает нормально, но при развертывании в Ubuntu и запуске приложения я получаю
MessageBodyWriter not found for media type=application/json, type=class java.util.ArrayList genericType=java.util.List<mypackage.Spot>
Есть идеи, почему это происходит?Я использую Oracle JDK в Windows, в то время как в Linux я использую OpenJDK.Обе стороны имеют одинаковую версию 1.8.0_181.
Редактировать: Я нашел решение здесь :
Зарегистрировать функцию
jerseyServlet.setInitParameter(
"jersey.config.server.provider.classnames",
"org.glassfish.jersey.jackson.JacksonFeature");