使用Jackson解析器将Generic类型变量反序列化为Map Key

时间:2016-08-16 05:40:07

标签: json jackson json-deserialization

我已经阅读了一些帖子,但找不到适合我问题的解决方案。

我正在尝试序列化/反序列化HashMap<String, Object>。这里哈希映射的值可以是什么?

当我将一个名为&#34; JobData&#34;的类添加到Map for serialize / deserialize时,我在反序列化objectMapper时看到了一些问题。

以下是示例代码

public class JobData {

    private FinalResult finalResult;

    public FinalResult getFinalResult(){
       return finalResult;
    }

    public void setFinalResult(FinalResult finalResult) {
       this.finalResult = finalResult;
  }
}

public class FinalResult<T> {

  private Map<T, Exception> exceptionMap;

  public HashMap<T, Exception> getFailedExceptionMap(){
     return exceptionMap;
  }

  public void setFailedExceptionMap(Map<T, Exception> map){
    exceptionMap = map;
  }
}

  Map<String, Object> data = new HashMap<String, Object>();
  JobData jobdata = new JobData();
  FinalResult result = new FinalResult();

  Map<Integer, Exception> exceptionMap = new HashMap<Integer, Exception>();
  exceptionMap.put(new Integer("1233456"), new Exception("MY_ERROR", "TESTING ERROR"));
  result.setFailedExceptionMap(exceptionMap);
  exportJobdata.setFinalResult(result);

  data.put("JOB_DATA", jobdata);

  ...............

  //Serialization
  mapper.writerWithType(HashMap.class).writeValue(arg1, arg0);

  .................

  //Deserialize
  HashMap<String, Object> map = mapper.readValue(in, new TypeReference<HashMap<String, Object>>()

有些链接建议将TypeFactory用于泛型类型?但不清楚如何使用它?

序列化工作正常,但我在尝试反序列化时遇到错误

  

com.fasterxml.jackson.databind.JsonMappingException:意外的令牌   (START_OBJECT),预计START_ARRAY:需要包含JSON数组   [。来源:类java.util.Map的AsPRAPPER_ARRAY类型信息   java.io.ByteArrayInputStream@13eb8acf; line:1,column:1251](通过   参考链:   的java.util.HashMap [&#34; JOB_DATA&#34;] - &GT; com.sample.JobData [&#34; finalResult&#34;] - &GT; com.sample.FinalResult [&#34; failedExceptionMap&#34; ])     在   com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:261)

0 个答案:

没有答案