【问题标题】:Return an array with jersey返回带有球衣的数组
【发布时间】:2016-04-25 17:36:52
【问题描述】:

我正在尝试用球衣制作一个示例 REST 服务器。我能够重新运行一个简单的字符串,但是当我尝试返回一个数组时,我得到了这个错误

 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>

【问题讨论】:

  • 请出示您的pom.xml
  • 帖子已编辑,添加了 pom.xml
  • 只是好奇,您为什么要使用最新的 Java 版本和最古老的 Jersey 版本之一?
  • 我在关注不同的教程,也许其中一个使用了旧版本的球衣。你认为这会导致之后的问题吗?

标签: java arrays jersey jax-rs


【解决方案1】:

您仍然需要一个 JSON 提供程序来处理 Object 到 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 配置中。另外,您可能需要this also

一旦你有了这个,你仍然无法处理char[]。这只是杰克逊无法处理那种类型的问题。但它可以处理 String[]List&lt;String&gt;List&lt;Character&gt; 或 POJO,以及您需要的几乎任何其他类型。我不太确定,但我认为它可能只是原始标量数组,它有问题。

【讨论】:

    【解决方案2】:

    尽量用Character[]类型代替char[]

    【讨论】:

      【解决方案3】:

      超级原始测试,如果不是强制使用 char 数组,请尝试将类型更改为 String,即使您发送单个字符也是如此。 这可能是 char marshaller 的问题

      @Path("/test") 
      public class Test {
      
      @GET
      @Produces(MediaType.APPLICATION_JSON)
      public List<String> getHello() {
          return Arrays.asList("a", "b");
      }
      

      记得改成双引号

      【讨论】:

      • 这不是强制性的,我只是想举个例子。我复制了你的代码,但它不起作用,我用一个简单的字符串重试,它又起作用了。
      • 同样的错误?我没有尝试代码...也许我犯了一些愚蠢的错误
      • 即使在简化之后仍然有相同的错误:Java 类 java.util.Arrays$ArrayList 和 Java 类型 java.util.List 的消息体编写器,并且未找到 MIME 媒体类型 application/json
      • 此时可能是依赖问题。尝试重现类似mkyong.com/webservices/jax-rs/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-21
      • 1970-01-01
      • 2016-05-05
      • 2014-12-01
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      相关资源
      最近更新 更多