是否必须在Jersey webservices中使用@XmlRootElement进行JSON响应?

时间:2013-03-21 12:17:17

标签: web-services rest jersey

我的代码实际上包含一个资源类和一个BEan类,它的返回类型是JSON。

资源类

@Path("/json")
public class JSONRetrive {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public JSONT getJson(){
        JSONT jsont = new JSONT();
        jsont.setJsont("inr");
        return jsont;
    }
}

/ *是否有任何Annotation将代表JSON。我是否需要使用任何其他注释。* /

我的Bean类

 
//@XmlRootElement
public class JSONT {
private String jsont;

public String getJsont() {
    return jsont;
}

public void setJsont(String jsont) {
    this.jsont = jsont;
}

}

如果我取消注释@XmlRootElement它是否正常工作是否还有其他替代解决方案

3 个答案:

答案 0 :(得分:2)

我为这个@XmlRootElement提供了替代解决方案,如果我们想要使用@XmlRootElement生成JSON响应,我们应该选择Jersey Jackson库。在web.xml(DD文件)

中添加以下给定的代码
<init-param>
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
    <param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>

和Jackson API相关的jar。

答案 1 :(得分:0)

也许this会有所帮助?我不明白为什么使用注释是一个问题,至少在这种情况下。你能否详细说明这对你造成的问题?

答案 2 :(得分:0)

如果您正在使用Jersey和Maven,那么只需转到您的pom.xml并根据您的情况取消注释/添加以下代码

<!-- uncomment this to get JSON support
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-binding</artifactId>
        </dependency>
-->

在此之后,您可以使用@Produces(MediaType.APPLICATION_JSON)并获得JSON响应。