我遇到了一个奇怪的问题。 我使用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的日志文件中找不到任何错误消息,所以我没有 想法是怎么回事。
有谁知道这个问题的任何可能原因?真的很感激......
答案 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是可以的。