Jersey 2.2:输出 xml 正常,但在 json 上失败
Posted
技术标签:
【中文标题】Jersey 2.2:输出 xml 正常,但在 json 上失败【英文标题】:Jersey 2.2: output xml OK, but fails on 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 的日志文件中没有找到任何错误消息,所以我没有 知道发生了什么。
有人知道这个问题的任何可能原因吗?真的很感激...
【问题讨论】:
【参考方案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 是可以的。
【讨论】:
以上是关于Jersey 2.2:输出 xml 正常,但在 json 上失败的主要内容,如果未能解决你的问题,请参考以下文章
jersey 2.2 和 Spring Security 3 依赖项?
带有 Jersey 2.2 和 Jackson 2.1 的自定义 ObjectMapper