CXF 가 jaxb 와 결합 하여 json 문자열 을 되 돌 릴 때 속성 이 수치 형 문자열 일 때 따옴표 문제 가 없습니다.

문제: CXF 가 jaxb 와 결합 하여 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>

좋은 웹페이지 즐겨찾기