Return 球衣数组
Return an array with jersey
我正在尝试用球衣制作一个示例 REST 服务器。我能够重新运行一个简单的字符串,但是当我尝试 return 一个数组时,我得到了这个错误
A message body writer for Java class [C, and Java type class [C, and MIME media type application/json was not found.
我也尝试添加@XMLRootElement,但问题依然存在。这是我的代码:
@Path("/test")
public class Test {
@GET
@Produces( MediaType.APPLICATION_JSON )
public char[] getHello() {
char[] test = { 'd', 'e', 'c', 'a', 'f', 'f', 'e',
'i', 'n', 'a', 't', 'e', 'd' };
return test;
}
}
编辑:pom.xml 添加
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>HospitalServer</groupId>
<artifactId>HospitalServer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<repositories>
<repository>
<id>maven2-repository.java.net</id>
<name>Java.net Repository for Maven</name>
<url>http://download.java.net/maven/2/</url>
<layout>default</layout>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.8</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
</project>
尝试使用Character[]类型而不是char[]
超级原始测试,如果不是强制使用char数组,即使您发送单个字符也尝试将类型更改为String。
char marshaller 可能有问题
@Path("/test")
public class Test {
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<String> getHello() {
return Arrays.asList("a", "b");
}
记得改成双引号
您仍然需要 JSON 提供程序来处理对象到 JSON 的序列化。对于 String 不需要一个,因为将 String 序列化为输出流是微不足道的,因此 Jersey 可以自行处理。所以只需添加以下内容
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.8</version>
</dependency>
然后在你的web.xml
中配置
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
将其添加到您的 Jersey servlet 配置中。另外,您可能需要 .
一旦你有了这个,你仍然无法处理char[]
。这只是杰克逊无法处理那种类型的问题。但它可以处理 String[]
或 List<String>
、List<Character>
或 POJO,以及您需要的几乎任何其他类型。我不太确定,但我认为它可能只是原始标量数组,它有问题。
我正在尝试用球衣制作一个示例 REST 服务器。我能够重新运行一个简单的字符串,但是当我尝试 return 一个数组时,我得到了这个错误
A message body writer for Java class [C, and Java type class [C, and MIME media type application/json was not found.
我也尝试添加@XMLRootElement,但问题依然存在。这是我的代码:
@Path("/test")
public class Test {
@GET
@Produces( MediaType.APPLICATION_JSON )
public char[] getHello() {
char[] test = { 'd', 'e', 'c', 'a', 'f', 'f', 'e',
'i', 'n', 'a', 't', 'e', 'd' };
return test;
}
}
编辑:pom.xml 添加
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>HospitalServer</groupId>
<artifactId>HospitalServer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<repositories>
<repository>
<id>maven2-repository.java.net</id>
<name>Java.net Repository for Maven</name>
<url>http://download.java.net/maven/2/</url>
<layout>default</layout>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.8</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
</project>
尝试使用Character[]类型而不是char[]
超级原始测试,如果不是强制使用char数组,即使您发送单个字符也尝试将类型更改为String。 char marshaller 可能有问题
@Path("/test")
public class Test {
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<String> getHello() {
return Arrays.asList("a", "b");
}
记得改成双引号
您仍然需要 JSON 提供程序来处理对象到 JSON 的序列化。对于 String 不需要一个,因为将 String 序列化为输出流是微不足道的,因此 Jersey 可以自行处理。所以只需添加以下内容
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.8</version>
</dependency>
然后在你的web.xml
中配置<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
将其添加到您的 Jersey servlet 配置中。另外,您可能需要
一旦你有了这个,你仍然无法处理char[]
。这只是杰克逊无法处理那种类型的问题。但它可以处理 String[]
或 List<String>
、List<Character>
或 POJO,以及您需要的几乎任何其他类型。我不太确定,但我认为它可能只是原始标量数组,它有问题。