0

返回序列化的HashMap有很多问题,但我没有找到一个很好的答案。

现在我只想简单地创建一个这样的休息服务:

@XmlElement(name = "Calibration")
private HashMap<String, Double> entry = new HashMap<String, Double>();

然后在我的 REST 服务中:

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/entry")
public HashMap<String, Double> current() {
    System.out.println("calibration request");
    entry.put("test", 3.00);
    return entry;
}

调用服务时会抛出 javax.ws.rs.WebApplicationException:

com.sun.jersey.api.MessageException:找不到 Java 类 java.util.HashMap、Java 类型 java.util.HashMap 和 MIME 媒体类型 application/json 的消息正文编写器。

我的 pom.xml,以防它有用:

<dependency>
        <groupId>com.sun.grizzly</groupId>
        <artifactId>grizzly-servlet-webserver</artifactId>
        <version>1.9.18-i</version>
    </dependency>
    <dependency>
        <groupId>com.sun.grizzly</groupId>
        <artifactId>grizzly-comet-webserver</artifactId>
        <version>1.9.46</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-grizzly</artifactId>
        <version>1.9.1</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.9.1</version>
    </dependency>

我使用 Grizzly 作为 webContainer。

4

2 回答 2

1

Jackson 可能是这里最简单的选择(并且 Jersey JSON 模块内置了 Jackson 支持)。web.xml您可以通过或通过配置对象配置 POJO JSON 支持(请参阅POJO 支持)。

注意:最新的 Jersey 1.x 版本是 1.17.1,如果可能,请考虑使用此版本。

于 2013-10-22T12:02:17.703 回答
0

最好的方法是将 HashMap 映射到一个简单的 bean 并返回 bean 而不是 HashMap。

于 2013-10-23T10:28:59.317 回答