我正在使用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论坛上没有人可以回答我的问题。
还有其他人有同样的问题吗?
此致
答案 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输出完美配合