2015-07-03 68 views
0

我使用球衣来创建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注释

回答

0

不会发生这种情况原来,我的插件在我的浏览器中使用的是错误地显示长值