CXF,RESTEASY 가 JSON 형식 으로 되 돌 릴 때 String 형식 값 이 수치 일 경우 JSON 에서 따옴표 가 사라 지 는 문제 해결
예:
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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.