在一个宁静的服务中,Jersey将HashMap序列化为json的最简单方法是什么?

时间:2013-10-22 09:28:34

标签: java json rest hashmap jersey

关于返回序列化的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。

2 个答案:

答案 0 :(得分:1)

杰克逊可能是最简单的选择(泽西JSON模块内置杰克逊支持)。您可以通过web.xml或通过配置对象配置POJO JSON支持(请参阅POJO support)。

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

答案 1 :(得分:0)

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