Jersey 2.2:输出xml确定,但在json上失败

时间:2013-09-11 03:29:39

标签: json jersey jax-rs

我遇到了一个奇怪的问题。 我使用Jersey 2.2来完成我的宁静网络服务(使用jersey-media-moxy)。 如果我将我的输出生成为application / xml,它运行正常。 但是如果将我的输出产生为application / json,我会得到“内部服务器错误500”。

我在ivy.xml中的依赖项设置是:

<dependency org="org.glassfish.jersey.core" name="jersey-server" rev="2.2"/>
<dependency org="org.glassfish.jersey.containers" name="jersey-container-servlet-core" rev="2.2"/>
<dependency org="org.glassfish.jersey.media" name="jersey-media-moxy" rev="2.2"/>

我的服务类是:

@Path("/projects/{companykey: [0-9]*}")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public class ProjectResource {
    private static Logger logger = Logger.getLogger(ProjectResource.class);
    private final Application app = Application.getInstance();
    @GET
    public List<ProjectBase> getProjectBases(
            @PathParam("companykey") String companyKeyStr) {
        ...
    }
    @GET
    @Path("/{projectkey: [0-9]*}")
    public ProjectBase getProjectBase(
            @PathParam("companykey") String companyKeyStr,
            @PathParam("projectkey") String projectKeyStr) {
        int companyKey = Integer.valueOf(companyKeyStr);
        int projObjKey = Integer.valueOf(projectKeyStr);
        logger.debug(MessageFormat.format("get project {1} of company {0}",
                companyKey, projObjKey));
        ProjectBase project = null;
        try {
            project = app.getProjectIF().getProjectBase(companyKey, projObjKey);
            if (project == null) throw new WebApplicationException(404);
            return project;
        } catch (ServerException se) {
            logger.warn("get project fails ! " + se);
            throw new WebApplicationException(500);
        }
    }
    ...
} 

//class end

如果我要求xml输出(访问http://biz.loc.net:8080/tm/rest/projects/100/104),我得到:

<projectBase>
<_checkTopicAccess>false</_checkTopicAccess>
<_checkTaskAccess>false</_checkTaskAccess>
....

如果我要求json输出,我得到:

  

HTTP状态500 - 内部服务器错误

     

输入状态报告

     

消息内部服务器错误

     

说明服务器遇到内部错误(内部服务器错误),导致无法完成此请求。

我在我的应用程序的日志文件或Tomcat的日志文件中找不到任何错误消息,所以我没有 想法是怎么回事。

有谁知道这个问题的任何可能原因?真的很感激......

2 个答案:

答案 0 :(得分:0)

你能展示实体代码吗?你错过了一个空的构造函数吗?

答案 1 :(得分:0)

感谢您的帮助,以下代码段是我的实体clas:

@XmlRootElement
public class ProjectBase implements UdaEnabled, SdaEnabled, FormBean {
    private int projObjKey;
    private String projName;
    //...
    private Timestamp createdAt;
    //...
    //...  
    @XmlElement(name = "createdAt")
    @XmlJavaTypeAdapter(TimestampAdapter.class)
    public Timestamp getCreatedAt() {
        return createdAt;
    }

    // non-args Constructor
    public ProjectBase() {
        init();
    }
}

它有一个空的构造函数,虽然这里面是init()

正如我所说,我认为这很奇怪,因为生成xml是可以的。