【问题标题】:Jersey 2.2: output xml OK, but fails on jsonJersey 2.2:输出 xml 正常,但在 json 上失败
【发布时间】:2013-09-14 22:43:27
【问题描述】:

我遇到了一个奇怪的问题。 我使用 Jersey 2.2 来做我宁静的 Web 服务(使用 jersey-media-moxy)。 如果我将输出生成为 application/xml,它运行良好。 但是如果将我的输出生成为 application/json,我会得到“Internal Server Error 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 - 内部服务器错误

输入状态报告

消息内部服务器错误

描述服务器遇到了一个内部错误(Internal Server Error),导致它无法完成这个请求。

我在我的应用程序的日志文件或 Tomcat 的日志文件中没有找到任何错误消息,所以我没有 知道发生了什么。

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

【问题讨论】:

    标签: json jersey jax-rs


    【解决方案1】:

    你能显示实体代码吗?你缺少一个空的构造函数吗?

    【讨论】:

      【解决方案2】:

      感谢您的帮助,以下代码sn-p是我的实体类:

      @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 是可以的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-26
        • 2015-03-13
        • 2020-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-17
        相关资源
        最近更新 更多