我已经看到了这个问题的一些解决方案,但似乎跟着他们并没有解决我的问题。我返回一个简单的字符串数组,当我返回它时,我收到此错误:
Severe: MessageBodyWriter not found for media type=application/json, type=class [Ljava.lang.String;, genericType=class [Ljava.lang.String;.
该方法非常简单(获取文件列表)
@GET
@Produces(MediaType.APPLICATION_JSON)
public String[] getSegments(@PathParam("userId") String userId,
@PathParam("deviceId") String deviceId) {
System.out.println("in get, userId passed: " + userId);
String[] segments = storage.getSegments(userId, deviceId);
return segments;
}
我的POM.XML似乎有其他帖子推荐的所有内容:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>RoverServerLib</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-servlet-portability</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.connectors</groupId>
<artifactId>jersey-apache-connector</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>${jersey.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>${jersey.version}</version>
</dependency>
</dependencies>
答案 0 :(得分:1)
问题在于MOXy。它不知道如何处理String数组。当您在类路径上使用MOXy时,它将用作默认值。使用杰克逊(jersey-media-json-jackson
)。您只需注册JacksonFeature
即可。这将禁用MOXy。请注意,即使只是从项目中删除MOXy,也不会像Glassfish那样有影响,因此您需要确保注册JacksonFeature
。
你也应该摆脱jackson-jaxrs-json-provider
。 jersey-media-json-jackson
已经将其拉入(但版本不同)。
另一件事是Glassfish已经拥有它自己的泽西和朋友版本。如果您没有将与泽西岛相关的所有依赖关系标记为<scope>provided</scope>
,那么您可能会遇到版本冲突。所以你应该把它们全部provided
。 Glassfish 4.1使用Jersey 2.10.4。如果您需要一些较新的版本功能,我建议updating Jersey in Glashfish。