2013-10-03 3 views
1

저지 웹 서비스를 진행하고 있습니다. like this 다음 내 저지 클라이언트JSON 문자열을 일반 Java 객체로 구문 분석 할 수 없습니다.

{"license":"12345","dimRequirement":[{"alternateId":"AlternateID","classificati‌​on":"1"}] } 

에서받은 JSON 문자열입니다하지만 난 그것을 error.I이

Unrecognized field "dimRequirement" (Class com.vxl.AppObject), not marked as ignorable 
at [Source: [email protected]; line: 1, column: 49] (through reference chain: com.vxl.appanalytix.AppObject["dimRequirement"]) 
    at org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53) 
    at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:244) 
    at org.codehaus.jackson.map.deser.StdDeserializer.reportUnknownProperty(StdDeserializer.java:589) 
    at org.codehaus.jackson.map.deser.StdDeserializer.handleUnknownProperty(StdDeserializer.java:575) 
    at org.codehaus.jackson.map.deser.BeanDeserializer.handleUnknownProperty(BeanDeserializer.java:684) 
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:515) 
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:351) 
    at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2131) 
    at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1402) 
    at com.vxl.CheckJersy.main(CheckJersy.java:56) 

을 구문 분석 잭슨을 사용 준다 구문 분석하고 때 나는

을 구문 분석 유형 참조를 추가하여 시도
new ObjectMapper().readValue(
       output,new TypeReference<AppObject<DimRequirement>>() { }); 

제네릭 클래스

@XmlRootElement 
@XmlSeeAlso({ DimRequirement.class}) 
    public class AppObject<T> implements Serializable { 

     private List<T> list; 
     private String license; 

     public AppObject() { 
      list = new ArrayList<T>(); 

     } 

     public AppObject(List<T> list) { 
      this.list = list; 
     } 

     @XmlAnyElement(lax = true) 
     public List<T> getList() { 
      return list; 
     } 

     public void setList(List<T> list) { 
      this.list = list; 
     } 

     public String getLicense() { 
      return license; 
     } 

     public void setLicense(String license) { 
      this.license = license; 
     } 

    } 

서비스 나는 당신의 AppObject 클래스는 JSON에 존재하지 않는 필드가 AppObject<xxx>,AppObject<yyy>

@POST 
    @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
    @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
    @Path("/getreq") 
    @Override 
    public AppObject getAllByClientNIsCurrent(
      AppObject<DimRequirement> appObject) { 
     List<DimRequirement> dimreqlist = dimRequirementDao 
       .getAllByClientNIsCurrent(appObject.getClientKey()); 
     AppObject<DimRequirement> appObject = new AppObject<DimRequirement>(); 
     appObject.setList(dimreqlist); 
     return appObject; 
    } 

답변

0

복귀 하나 개 이상의 POST 요청에 대해 동일한 서비스를 사용하고 싶습니다. 무시할 수 있다고 말하는 잭슨 주석이있는 클래스를 만들어야합니다.

+0

수정 된 코드를 확인하십시오. AppObject는 일반적으로 서버 측에서 AppObject를 반환합니다. [check this] (http://stackoverflow.com/questions/19113280/jersey-rest-services-showing-exception-javax-ws-rs-webapplicationexception-java) – jos

0

죄송합니다. 내 다른 답변에 대해서는 무시하십시오.

나는 코드가 그대로 작동합니다. 자동 매핑이 작동하려면 변수 "list"의 이름을 "dimRequirement"로 지정해야합니다. 일부 Jackson 설정은 라이브러리에서 사용할 수 있으므로 getter 및 setter를 수정해야 할 수도 있습니다.

+0

나는 서비스를 추가 한 질문을 확인하십시오. AppObject , AppObject ' – jos

+0

을 반환하는 하나 이상의 POST 요청에 대해 동일한 서비스를 사용하고 싶습니다. 아니면 모든 필드에 대해 ** dimRequirement **라는 필드 ** list ** insted를 갖는 json 문자열을 만들 수있는 방법이 있습니까? 목적 – jos

관련 문제