CXF,RESTEASY 가 JSON 형식 으로 되 돌 릴 때 String 형식 값 이 수치 일 경우 JSON 에서 따옴표 가 사라 지 는 문제 해결

3148 단어 자바jsonxmlRESTsun
CXF 나 RESTEASY 등 프레임 워 크 를 사용 하여 REST 방식 의 WEB 서 비 스 를 구축 할 때
예:
JAXB 주 해 를 사용 하여 되 돌아 오 는 대상 을 정의 합 니 다.

@XmlRootElement(name = "user")
@XmlType(propOrder = { "id", "nickName", "signature", "birthday", "gender" })
@XmlAccessorType(XmlAccessType.FIELD)
public class GetResponse {
		private Long id;
		private String nickName;
...

JSON 형식 으로 되 돌 릴 때 nickName 값 이 12345 이면 되 돌아 오 는 JSON 내용 은 다음 과 같 습 니 다.

{"id":1,"nickName":12345}

이치 대로 말 하면 제 이 슨 의 내용 은 다음 과 같다.

{"id":1,"nickName":"12345"}

12345 에 따옴표 가 있어 야 합 니 다.
이 문 제 를 해결 하려 면 관련 바 텀 코드 를 수정 해 야 합 니 다.

//  com.sun.xml.bind.v2.runtime.XMLSerializer.java 


public void leafElement(Name tagName, String data, String fieldName) throws SAXException, IOException, XMLStreamException {
		Object currentObj = cycleDetectionStack.peek();
		if (out instanceof com.sun.xml.bind.v2.runtime.output.XMLStreamWriterOutput) {  //  out   ,XMLStreamWriterOutput json    xml   writer 
			Field field = null;
			try {
				field = currentObj.getClass().getDeclaredField(fieldName);
			} catch (Exception e1) {
				try {
					field = currentObj.getClass().getField(fieldName);
				} catch (Exception e2) {

				}                 
			}
			if (field != null && field.getType().getName().equals("java.lang.String")) { //                ,     $:
				if (isNumber(data)) {
					data = "$:" + data;
				}
			}
		}
....

//  org.codehaus.jettison.mapped.DefaultConverter.java         

public Object convertToJSONPrimitive(String text) {
		if (text == null)
			return text;
		Object primitive = null;

		// Attempt to convert to Integer 
//----------------------------                    
		try {
			primitive = ENFORCE_32BIT_INTEGER ? Integer.valueOf(text) : Long.valueOf(text);
		} catch (Exception e) {/**/
		}
		// Attempt to convert to double
		if (primitive == null) {
			try {
				Double v = Double.valueOf(text);
				if (!v.isInfinite() && !v.isNaN()) {
					primitive = v;
				} else {
					primitive = text;
				}
			} catch (Exception e) {/**/
			}
		}
		// Attempt to convert to boolean
		if (primitive == null) {
			if (text.trim().equalsIgnoreCase("true") || text.trim().equalsIgnoreCase("false")) {
				primitive = Boolean.valueOf(text);
			}
		}

		if (primitive == null || !primitive.toString().equals(text)) {
			// Default String
			if (text.startsWith("$:")) {          //         ,    
				text = text.substring(2);
			}

			primitive = text;
		}

		return primitive;
	}


좋은 웹페이지 즐겨찾기