RestEasy和JSON - 如何避免数字周围的引号?

时间:2010-09-29 17:53:54

标签: json seam resteasy

我正在使用RestEasy将实体交给JSON。这工作正常,但不知何故,每件事都表示为一个字符串。 e.g。

@XmlRootElement(name="TestObject")
public class TestObject {
    private Long value;
    public Long getValue(){
        return value;
    }
}

而不是创建类似:{TestObject:{value:1234}}

的内容

创建{TestObject:{value:"1234"}}(请注意数字周围的“”)

因此long值被转换为String。我怎么能避免这种情况?

我已经在杰克逊论坛上询问过哪些RestEasy用于JSON marchaling,但是他们说这可能是由Java-> XML-> JSON引起的。 似乎没有一个RestEasy论坛,在Seam论坛上没有人可以回答我的问题。

还有其他人有同样的问题吗?

此致

2 个答案:

答案 0 :(得分:1)

好的问题是RestEasy + Seam默认使用Jettison(而不是Jackson)。 Jettison通过Java-> XML-> JSON进行游戏。

Jackson罐子实际上并不包含在Seam发行版中,所以你必须下载RestEasy并将所有提到jackson的罐子复制到你的lib目录中。当RestEasy在类路径中找到resteasy-jackson-provider.jar时,Jackson将被用来代替Jettison。

从Jettison搬到杰克逊时遇到的一个问题是骑车参考。使用Jettison,您只需注释方法(例如@ManyToOne关系) @XmlTransient。对于杰克逊,您必须使用@JsonIgnore

对其进行注释

答案 1 :(得分:1)

使用

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jettison-provider</artifactId>
    <version>2.0.1.GA</version>
    <exclusions>
        <exclusion>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
        </exclusion>
        <exclusion>
            <groupId>javax.xml.stream</groupId>
            <artifactId>stax-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

我只使用resteasy-jettison-provider,但是当我尝试获取JSON输出时服务器挂起,但在我排除了jaxb-api和jaxb-impl之后。 webservice与JSON输出完美配合