29

我正在尝试为作为 JSON 传入的对象创建内部类类型,但是虽然我在这里以及杰克逊的网站上阅读了大量内容,但我似乎无法获得正确的组合,所以如果其他人有任何指针他们将不胜感激。我在下面发布了一些片段并删除了所有 getter 和 setter,我不认为他们需要发布。我正在使用杰克逊 2.2。

我试图反序列化的类:

public class Settings {
  private int offset;
  private int limit;
  private String type;
  private Map<String, Criteria> criteria;

  public class Criteria {
    private String restriction;
    private Object value;
  }
}

我用来反序列化的代码:

ObjectMapper om = new ObjectMapper();
TypeFactory tf = om.getTypeFactory();
JavaType map = tf.constructMapLikeType( Map.class, String.class, Criteria.class );
JavaType type = typeFactory.constructType( Settings.class, map );
Settings settings = om.readValue( entity, type );

我的 JSON 测试数据:

{ "type": "org.json.Car", "criteria": { "restriction": "eq", "value": "bmw" } }
4

2 回答 2

81

正确的答案是您缺少内部类上的 static 关键字。

只需确保存在“静态”关键字即可。

阅读http://www.cowtowncoder.com/blog/archives/2010/08/entry_411.html

它需要你 3 分钟,但会让你在一天的剩余时间里都很开心。

于 2015-04-17T10:57:09.530 回答
17

如果可以的话,那么让你的生活变得简单,将内部类移动到一个普通类,并在 Settings 类中引用。然后使用 jackson 进行编组,这是你如何拥有你的课程:

public class Settings {
  private int offset;
  private int limit;
  private String type;
  private Map<String, Criteria> criteria;
  private Criteria criteria;
}


 class Criteria {
    private String restriction;
    private Object value;
  }
于 2013-06-25T05:57:37.747 回答