Jersey不正确地解析json long
问题描述:
我使用球衣来创建json/xml REST api。但是我在Moxy遇到了一些奇怪的行为。Jersey不正确地解析json long
当它大于某个值时,它似乎会切断一段长长的java值。
我使用有问题的实体的主键是:871687120000007010,但如果我询问我的API来进行测试,将出现以下情况:
http://i.stack.imgur.com/QbExD.png
注意,图像显示“EAN”(主键)已被切断。 做一些测试它后,我发现了以下工作:
使用9223372036854775807作为主键(64位有符号整数最大值)
产量:它已经被解析MOXY后9223372036854776000。这比一个64位的int整数还要高。
但投入9223372036854774807
息率9223372036854775000
好像圆高值高达1000的精度。
有没有人知道这里发生了什么?
模型类:
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "CONNECTION")
@XmlRootElement
public class P4Connection {
@XmlElement
@Column(name = "SENDER", nullable = false)
private long sender;
@XmlElement
@Column(name = "RECEIVER", nullable = false)
private long receiver;
@Id
@XmlElement(type = Long.class)
@Column(name = "ID", nullable = false)
private long ean;
@XmlElement
@Column(name = "LAST_COLLECT")
private Date lastCollect;
@ManyToMany
private Set<Request> REQUEST;
public P4Connection() {
REQUEST = new HashSet<>();
}
@XmlTransient
public long getSender() {
return sender;
}
public void setSender(long sender) {
this.sender = sender;
}
@XmlTransient
public long getReceiver() {
return receiver;
}
public void setReceiver(long receiver) {
this.receiver = receiver;
}
@XmlTransient
public long getEan() {
return ean;
}
public void setEan(long id) {
this.ean = id;
}
@XmlTransient
public Date getLastCollect() {
return lastCollect;
}
public void setLastCollect(Date lastCollect) {
this.lastCollect = lastCollect;
}
public Set<Request> getRequests() {
return REQUEST;
}
}
的API方法:
@GET
@Path("/{ean}")
@Produces(MediaType.APPLICATION_JSON)
public P4Connection getConnection(@PathParam("ean") String ean,
@Context UriInfo uriInfo) throws AppException {
long eancode = parseEAN(ean, uriInfo);
Session session = Database.getInstance().getSession();
Query query = session.createQuery("from P4Connection where ean = ?");
query.setLong(0, eancode);
List connections = query.list();
session.close();
if (connections.size() != 1)
throw new AppException(ErrorCode.NOT_FOUND, uriInfo);
System.out.println(((P4Connection) connections.get(0)).getEan());
return (P4Connection) connections.get(0);
}
当我呈现为XML通过改变@Produces
注释
答
不会发生这种情况原来,我的插件在我的浏览器中使用的是错误地显示长值