【发布时间】:2013-12-24 05:47:10
【问题描述】:
我有一个 POJO,我正在尝试用球衣序列化作为休息 api 响应。只有部分属性被序列化。 getter 返回的值不为空。
如果我尝试对属性进行排序,则会为“缺失”属性抛出 IllegalAnnotationExceptions,就好像它们不存在一样。
我还有其他几个 POJO 可以正常工作。我有一个没有看到任何属性的对象和一个看到 10 个属性中的 7 个的对象。
有人能告诉我发生了什么吗?并建议如何解决?
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import java.io.Serializable;
import java.util.Date;
@XmlType(propOrder = { "startDateTime","endDateTime","durationMinutes","remainingMinutes","percentComplete","nodesDiscovered","nodesTried",
"totalNodes", "discoveryCompleted","canceledFlag" })
@XmlRootElement
public class DiscoveryStatus implements Serializable {
private Number discoveryCompleted=0;
private Date startDateTime = new Date();
private Date endDateTime = new Date();
private Number startMS =20;
private Number currMS =20;
private Number durationMinutes =AppSettings.DiscoveryNodeMulticastDurationMins;
private Number remainingMinutes =20;
private Boolean canceledFlag=false;
private Number percentComplete =0;
private Number nodesDiscovered =0;
private Number nodesTried =0;
private Number totalNodes =0;
public DiscoveryStatus(){
totalNodes =1;
}
// Seen
public Date getStartDateTime(){
return this.startDateTime;
}
// Seen
public Number getDurationMinutes(){
return this.durationMinutes;
}
public Number getRemainingMinutes(){
return this.remainingMinutes;
}
// Seen
public Date getEndDateTime(){
return this.endDateTime;
}
public Number getDiscoveryCompleted(){
return this.discoveryCompleted;
}
public Boolean getCanceledFlag(){
return this.canceledFlag;
}
// Seen
public Number getPercentComplete(){
return this.percentComplete;
}
// Seen
public Number getNodesDiscovered(){
return this.nodesDiscovered;
}
// Seen
public Number getNodesTried(){
return this.nodesTried;
}
// Seen
public Number getTotalNodes(){
return this.totalNodes;
}
public Number setDiscoveryCompleted(boolean discoveryCompleted ) {
// gm this.discoveryCompleted =discoveryCompleted;
return this.discoveryCompleted;
}
public Number setPercentComplete (Number percentComplete) {
this.percentComplete =percentComplete;
return this.percentComplete;
}
public Number setNodesDiscovered(Number nodesDiscovered) {
this.nodesDiscovered =nodesDiscovered;
return this.nodesDiscovered;
}
public Number setNodesTried(Number nodesTried) {
this.nodesTried =nodesTried;
return this.nodesTried;
}
public Number setTotalNodes(Number totalNodes) {
this.totalNodes =totalNodes;
return this.totalNodes;
}
public Date setStartDateTime(Date startDateTime) {
this.startDateTime = startDateTime;
return this.startDateTime;
}
public Date setStartDateTime() {
this.startDateTime = new Date();
return this.startDateTime;
}
public Date setEndDateTime(Date endDateTime) {
this.endDateTime = endDateTime;
return this.endDateTime;
}
public Date setEndDateTime() {
this.endDateTime = new Date();
return this.endDateTime;
}
public Number setDurationMinutes(Number durationMinutes) {
this.durationMinutes = durationMinutes;
return this.durationMinutes;
}
public Number setDurationMinutes() {
this.durationMinutes = AppSettings.DiscoveryNodeMulticastDurationMins;
return this.durationMinutes;
}
}
【问题讨论】:
-
您是否为所有这些字段提供了具有正确 JavaBeans 命名的 setter?
-
我相信是这样.. 包括 getter 代码,是否需要 setter?
-
也添加了设置器
-
为所有的 getter 添加匹配的 setter(例如
setCanceledFlag方法),这应该可以解决问题。否则 JAXB 不会将那些未注释的方法视为 XML 属性。
标签: java json serialization jaxb jersey