2013-05-29 2 views
2

JAXB를 사용하여 bean을 JSON으로 변환하고 있습니다. JAXB가 유형의 빈 값을으로 변환하면 잘립니다.JAXB는 long 값을 자릅니다

예 :

내 긴 값이있는 경우 : 44444444444444450이

은 누구도 날이 문제를 해결하는 데 도움 수 : 44444444444444444
JAXB이처럼 잘라을?

감사

답변

1

참고 :은 내가 EclipseLink JAXB (MOXy) 리드와 JAXB (JSR-222) 전문가 그룹의 구성원입니다.

JAXB (JSR-222) 사양은 JSON과 객체의 변환을 다루지 않습니다. 문제는 JAXB 메타 데이터를 활용하는 JSON 바인딩 구현에서 비롯됩니다. 아래에서는 MOXy가 JSON 바인딩 공급자로 사용될 때이 사용 사례가 완벽하게 작동 함을 보여줍니다.

자바 모델 (푸)

import javax.xml.bind.annotation.*; 

@XmlAccessorType(XmlAccessType.FIELD) 
public class Foo { 

    private long bar; 

} 

jaxb.properties

당신의 JAXB 프로 바이더로 MOXY를 지정하려면 도메인 모델과 동일한 패키지에 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

액세스하지 못하도록합니다. 긴 값을 문자열로 변환하기위한 인터셉터를 만들고 싶습니다. 문제가 해결 될 것이라고 생각합니다. 맞습니까? –

+0

@ user2433783 - 그렇게하지 않아도됩니다. 어떤 환경에서 뛰고 있습니까? JSON 바인딩 공급자로 무엇을 사용하고 있습니까? –

+0

기본 libs 서버 Jboss 7.1을 사용하고 있습니다. 프로젝트 요구 사항 중 하나가 기본값 이외의 lib를 사용하지 않습니다. –