2017-05-05 92 views
0

與複雜GROUPBY請求一個java蒙戈項目,
我嘗試反序列化這樣一個JSON來jongo /傑克遜反序列化一類具有通用性質

{ 
    "_id" : { 
    "TAB_COD" : "DOC1", 
    "DON_COD" : "TXEX42030164" 
    }, 
    "count" : 1.0 
} 

到一個通用的java類是這樣的:

public class AggregateResult<T extends MongoPojo> { 

    public AggregateResult() { 
    } 

    @JsonProperty("_id") 
    T id; 
    @JsonProperty("count") 
    long count; 
} 

此我使用DAO這樣定義:

public class MyDAO extends DAO<MyDataClass> { 

} 

public class MyDataClass extends MongoPojo { 
    @JsonProperty("TAB_COD") 
    String tabCod; 

    @JsonProperty("DON_COD") 
    String donCod; 
} 

public abstract class DAO<T extends MongoPojo> { 

public void group(...){ 
collection().aggregate(...).and(...) 
      .and(...).as(AggregateResult.class)); 
} 

,當我打電話給我的道組()方法 我有這個堆棧跟蹤

org.jongo.marshall.MarshallingException: Unable to unmarshall result to class com......AggregateResult from content { "_id" : { "TAB_COD" : "DOC1" , "DON_COD" : "TXEX42030164"} , "count" : 1} 
    at org.jongo.marshall.jackson.JacksonEngine.unmarshall(JacksonEngine.java:50) 
    at org.jongo.ResultHandlerFactory$UnmarshallingResultHandler.map(ResultHandlerFactory.java:43) 
    at org.jongo.Aggregate$ResultsIterator.next(Aggregate.java:98) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com......MongoPojo, problem: abstract types either need to be mapped to concrete types, have custom deserializer, or be instantiated with additional type information 
at [Source: [email protected]; pos: 5] (through reference chain: com......AggregateResult["_id"]) 
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:216) 
    at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:908) 
    at com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserialize(AbstractDeserializer.java:150) 
    at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:490) 
    at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:101) 
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:260) 
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:125) 
    at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1575) 
    at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1234) 
    at org.jongo.marshall.jackson.JacksonEngine.unmarshall(JacksonEngine.java:47) 
    ... 28 more 

你能幫我找到反序列化解決方案與通用屬性的類? 感謝您的幫助

回答

0

你的POJO類應該implements Serializable和你@JsonIgnoreProperties(ignoreUnknown=true)到AggregateResult類

+0

我已經測試您的解決方案,但jongo /傑克遜迴歸「ID」屬性作爲HashMap實例,而不是作爲我的POJO實例 – flagadajones