我正在使用jersey来创建一个json / xml REST api。但我在Moxy遇到了一些奇怪的行为。
当它大于某个值时,它似乎会切断一个java并将值向上舍入。
我用于相关实体的主键是:871687120000007010,但如果我查询我的api进行测试,则会发生以下情况:
http://i.stack.imgur.com/QbExD.png
请注意,图像显示“EAN”(主键)已被切断。 在用它进行一些测试后,我发现了以下内容:
使用9223372036854775807作为主键(64位有符号整数的最大值)
收益率:9223372036854776000经过moxy解析后。这高于64bit signed 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);
}
当我通过更改@Produces
注释
答案 0 :(得分:0)
原来我在浏览器中使用的插件错误地显示了长值