CXF 가 jaxb 와 결합 하여 json 문자열 을 되 돌 릴 때 속성 이 수치 형 문자열 일 때 따옴표 문제 가 없습니다.
6882 단어 JSON 으로 돌아 가기
이 문 제 는 영향 이 비교적 큰 것 이 어야 한다. 인터넷 의 자료 가 많 지 않 은 데 그 중에서 비교적 도움 이 되 는 것 은? http://fly2wind.iteye.com/blog/730350
쓰다
CXF, RESTEASY 가 JSON 형식 으로 되 돌 릴 때 String 형식 값 이 수치 일 경우 JSON 에서 따옴표 가 사라 지 는 문제 해결
이 문 제 를 해결 하려 면 관련 바 텀 코드 를 수정 해 야 합 니 다.
예, 전체 전환 과정 은 Object -> XML - JSON 입 니 다. Object 에서 XML 로 전환 하 는 과정 에서 유형 을 잃 어 버 립 니 다.
자바 빈 이 XML 로 전환 한 후 JSON 으로 전환 하면 유형 을 잃 게 됩 니 다. org. codehaus. jettison. mappd. Default Converter 가 취 하 는 보완 조 치 는 숫자 를 숫자 형식 으로 바 꾸 지만 문자 형 과 값 이 숫자 인 대상 을 순식간에 죽 이 는 것 입 니 다.
해결 방안 으로서 이 사고방식 은 매우 좋다. 먼저 문자열 에 특수 표 지 를 추가 한 다음 에 변환기 로 특수 표 지 를 제거한다.
그러나 대부분의 사람들 은 바 텀 코드 를 바 꿔 야 하 는 것 이 비 현실 적 이 고 더 안전 한 방법 이 있 는 지 를 인식 할 것 이다.
요 며칠 동안 나 도 약간의 시 도 를 했다. 예 를 들 어 네티즌 의 말 에 따 르 면 JAXB 의 밑바닥 을 바 꾸 고 컨버터 를 설 치 했 으 며 결 과 를 성공 적 으로 뛰 어 나 갈 수 있 었 지만 더 큰 컵 기구 가 발생 했다.이 방법 은 루트 1 급 변수 값 만 정확하게 되 돌 릴 수 있 습 니 다. 자바 빈 이 라면. 변 수 는 인 용 된 다른 Bean 입 니 다. 목록... 결 과 를 정확하게 얻 을 수 없습니다.
저도 새로운 JSONprovider, JAXElement Provider 를 사용 하여 문 자 를 모두 특수 표 지 를 추가 하면 정확 한 결 과 를 얻 을 수 있 습 니 다.
하지만 이 방법 들 이 최선 은 아 닐 수도 있 습 니 다.
드디어 비교적 간결 한 방법 이 있다.
CXF 의 경우 파일 을 설정 합 니 다.
<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
<property name="serializeAsArray" value="true"/>
<property name="arrayKeys" ref="jsonKeys"/>
<property name="produceMediaTypes" ref="jsonTypes"/>
<property name="consumeMediaTypes" ref="jsonTypes"/>
<property name="ignoreNamespaces" value="true"/>
<property name="dropRootElement" value="true"/>
<property name="ignoreMixedContent" value="true"/>
<property name="attributesToElements" value="true"/>
</bean>
자바 빈 의 문자 변수 에 추가 하기: @ XmlAttribute
/**
* / .
* Field: subject
*/
@Size(max = 32)
@XmlAttribute
private java.lang.String subject;
/**
* / .
* Field: body
*/
@Size(max = 255)
@XmlAttribute
private java.lang.String body;
이렇게 하면 원 하 는 결 과 를 얻 을 수 있 고, 몇 단계 의 인용 대상 이 든 지 다 된다.
{
"msg": "OK",
"ret": 0,
"err": 0,
"message": {
"subject": "1",
"body": "1",
"id": 423,
"userId": 1,
"clientVersion": 1,
"sentId": 1,
"receiptId": 1,
"threadId": 275,
"status": 0,
"creationDate": 1338361215759,
"modificationDate": 1338361215759,
"usn": 710
}
}
전체 cxf 프로필
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.5.xsd
http://cxf.apache.org/jaxrs
http://cxf.apache.org/schemas/jaxrs.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<util:list id="jsonKeys">
<value>forumThreads</value>
<value>forumMessages</value>
<value>forumUserStatis</value>
</util:list>
<util:list id="jsonTypes">
<value>application/json</value>
<value>application/jettison</value>
</util:list>
<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
<property name="serializeAsArray" value="true"/>
<property name="arrayKeys" ref="jsonKeys"/>
<property name="produceMediaTypes" ref="jsonTypes"/>
<property name="consumeMediaTypes" ref="jsonTypes"/>
<property name="ignoreNamespaces" value="true"/>
<property name="dropRootElement" value="true"/>
<property name="ignoreMixedContent" value="true"/>
<property name="attributesToElements" value="true"/>
</bean>
<jaxrs:server id="restApiResource" address="/">
<jaxrs:serviceBeans>
<!--
<ref bean="userAuthServiceResource"/>
<ref bean="syncServiceResource"/>
<ref bean="imageServiceResource"/>
<ref bean="messageServiceResource"/>
<ref bean="upgradeServiceResource"/>
-->
</jaxrs:serviceBeans>
<jaxrs:providers>
<ref bean="jsonProvider"/>
</jaxrs:providers>
<jaxrs:extensionMappings>
<entry key="json" value="application/json"/>
<entry key="xml" value="application/xml"/>
</jaxrs:extensionMappings>
</jaxrs:server>
</beans>