2013-05-29 100 views
2

我正在使用JAXB將bean轉換爲JSON。當JAXB轉換類型的bean值時,被截斷。JAXB截斷長整型值

例子:

如果我長的數值:44444444444444444
JAXB截斷這樣的:44444444444444450

誰能幫我解決這個問題呢?

感謝

回答

1

注:我是EclipseLink JAXB (MOXy)鉛和JAXB (JSR-222)專家小組的成員。

JAXB(JSR-222)規範不包括將對象轉換爲JSON或從JSON轉換對象。您遇到的問題來自於利用JAXB元數據的JSON綁定實現。下面我將演示當MOXy用作JSON綁定提供程序時,此用例可以很好地工作。

Java模型(美孚)

import javax.xml.bind.annotation.*; 

@XmlAccessorType(XmlAccessType.FIELD) 
public class Foo { 

    private long bar; 

} 

jaxb.properties

要指定莫西爲您的JAXB提供者,你需要包括在同一個包稱爲jaxb.properties爲您的域模型文件與以下條目(請參閱:http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html)。

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory 

演示

import java.util.*; 
import javax.xml.bind.*; 
import javax.xml.transform.stream.StreamSource; 

import org.eclipse.persistence.jaxb.JAXBContextProperties; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     Map<String, Object> properties = new HashMap<String, Object>(2); 
     properties.put(JAXBContextProperties.MEDIA_TYPE, "application/json"); 
     properties.put(JAXBContextProperties.JSON_INCLUDE_ROOT, false); 
     JAXBContext jc = JAXBContext.newInstance(new Class[] {Foo.class}, properties); 

     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     StreamSource json = new StreamSource("src/forum16821525/input.json"); 
     Foo foo = unmarshaller.unmarshal(json, Foo.class).getValue(); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(foo, System.out); 
    } 

} 

的input.xml /輸出

{ 
    "bar" : 44444444444444444 
} 
+0

那好吧,我看不到與配置的聯繫,有工作的代理阻止我從訪問。 我想創建一個攔截器來將long值轉換爲一個String? 我想這樣的問題也解決了,對嗎? –

+0

@ user2433783 - 你不需要那樣做。你在運行什麼環境?你用什麼作爲JSON綁定提供者? –

+0

我使用默認的libs服務器Jboss 7.1,項目的其中一個要求是使用默認值以外的任何lib。 –