2014-12-10 3 views
2

Jersey와 MOXy를 사용하여 REST 서비스를 작성하고 있습니다. "숫자는"타입이 취소 인용해야한다 동안Jersey + MOXy를 사용하는 JSON의 변수 유형

{ 
    indexes:[ 
    { 
     "name": "ABC", 
     "value": "abcdef" 
     "displayValue": "abcdef", 
     "type": "string" 
    }, 
    { 
     "name": "XYZ", 
     "value": 12345 
     "displayValue": "12345", 
     "type": "number" 
    }, 
    ... 
    ] 
} 

문자열 형을 인용한다 : 나는 다음과 같습니다 객체의 JSON 배열을 작성해야합니다.

나는 서비스 요청에 다음과 같은 POJO를 반환하려고 :
public class Index { 
    String name; 
    Object value; 
    String displayValue; 
    String type; 
} 

나는 "유형"에 따라, 값으로 정수 또는 문자열 중 하나를 할당 할 setValue의 정의. 마찬가지로 getValue를 정의하여 Integer 또는 String 중 하나를 반환합니다.

{ 
    indexes:[ 
    { 
      "name": "ABC", 
     "value": { 
      "type": "xsd:string", 
      "value": "abcdef" 
     }, 
     "displayValue": "abcdef", 
     "indexType": "string" 
    }, 
    { 
      "name": "XYZ", 

      "value": { 
      "type": "xsd:int", 
      "value": 812501 
     }, 
    "displayValue": "812501", 
    "indexType": "number" 
    }, 
    ... 

나는, "값"필드의 변수 유형 값을 필요 달성하기 위해 어떤 방법이 있나요 : 여기

는 비 놀랍게도, 중괄호의 다른 수준을 생성하는, 내 출력?

답변

0

문제가 정확한지 잘 모르겠습니다. 어떤 JSON 라이브러리를 사용하고 있습니까? 또한 Index 클래스에 대한 자세한 정보를 제공 할 수 있습니까? setValue (Object value)가 특별한 일을 할 필요가있는 이유가 확실하지 않습니다. 나는 다음과 같은 코드로 잭슨 JSON 라이브러리를 사용하는 경우 :

public static void main(String[] args) throws JsonProcessingException { 
    Index[] indices = new Index[2]; 
    indices[0] = new Index(); 
    indices[0].name = "ABC"; 
    indices[0].value = "abcdef"; 
    indices[0].displayValue = indices[0].value + ""; 
    indices[0].type = "string"; 
    indices[1] = new Index(); 
    indices[1].name = "XYZ"; 
    indices[1].value = 123456; 
    indices[1].displayValue = indices[1].value + ""; 
    indices[1].type = "number"; 
    System.out.println(new ObjectMapper().writeValueAsString(indices)); 
} 

public static class Index { 

    String name; 
    Object value; 
    String displayValue; 
    String type; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public Object getValue() { 
     return value; 
    } 

    public void setValue(Object value) { 
     this.value = value; 
    } 

    public String getDisplayValue() { 
     return displayValue; 
    } 

    public void setDisplayValue(String displayValue) { 
     this.displayValue = displayValue; 
    } 

    public String getType() { 
     return type; 
    } 

    public void setType(String type) { 
     this.type = type; 
    } 
} 

을 나는 다음과 같은 출력을 얻을 : 나는 믿고

[{"name":"ABC","value":"abcdef","displayValue":"abcdef","type":"string"}, 
{"name":"XYZ","value":123456,"displayValue":"123456","type":"number"}] 

가 당신을 위해 무엇을 찾고 있습니다.

+0

답장을 보내 주셔서 감사합니다. 네, 당신의 본보기가 바로 제가 필요로하는 것입니다. 그러나, 나는 잭슨 (이것은 나의 결정이 아니다)을 사용하지 않고, 객체를위한 "유형"을 생성하는 MOXy를 사용한다. –

+0

또한 POJO를 JSON으로 직접 변환하지 않습니다. POJO를 서비스 응답으로 반환하므로 MOXy는 나중에 그 마법을 사용합니다. –