我要参与项目:名为Usuario的API Rest和名为store的JEE Application。 Store通过Usuario API获取信息。
使用MediaType.APPLICATION_JSON_TYPE发送和接收所有信息。
在API中有Evento实体,它具有下一个属性:Date fecha。 在JEE应用程序中有Evento bean,它具有下一个属性:Date fecha。
当API发送Evento类的任何对象时,它会发送日期格式为yyyy-MM-dd HH:mm:{“Date”:“2017-12-06 23:02”}。
JEE应用程序使用Client和WebTarget来使用de API并获取信息。
这里的问题是evento对象中的fecha(类型为Date)为null。它没有很好地反序列化。
我不能在JEE Application上使用Spring。我在商店应用程序中使用JAX-RS。
请问你能帮帮我吗?
答案 0 :(得分:1)
首先澄清一些事实。 (不过,我不是100%肯定的。)
application/json
的基础消息提供程序。我们说我们有这个实体。
// I really want to know what Evento/fatcha means.
// Are they Italian words?
@XmlRootElement
@Entity
public class Evento implements Serializable {
public Date getFetcha() {
return ofNullable(fetcha)
.map(v -> new Date(v.getTime()))
.orElse(null);
}
public void setFetcha(final Date fetcha) {
this.fetcha = ofNullable(fetcha)
.map(v -> new Date(v.getTime()))
.orElse(null);
}
@XmlElement
@Temporal(TIMESTAMP)
private Date fetcha;
}
现在我们无法提供帮助,但依赖于基础MessageReader
或MessageWriter
来application/json
中序列化/反序列化。
杰克逊将以某种方式工作,而MOXy将以其方式运作。
推送客户端的唯一方法是,当他们GET
资源时,他们应该使用与格式完全相同的格式。
我使用的一种方法是使用另一个属性进行统一格式化/解析。
@XmlRootElement
@Entity
public class Evento implements Serializable {
// ...
@JsonProperty
@JsonbProperty
@XmlElement
public String getFetchaIsoz() {
return ofNullable(getFetcha())
.map(Date::toInstant)
.map(DateTimeFormatter.ISO_INSTANT:format)
.orElse(null);
}
public void setFetchaIsoz(final String fetchaIsoz) {
setFetcha(ofNullable(fetchaIsoz)
.map(DateTimeFormatter.ISO_INSTANT:parse)
.map(Instant::from)
.map(Date::from)
orElse(null));
}
@JsonIgnore // just in case, e.g. Spring?
@JsonbTransient
@XmlTransient
@Temporal(TIMESTAMP)
private Date fetcha;
}
我们没有替代属性可以保证以特定格式工作。