Jackson无法解析嵌套对象,但异常Constructur Argument#6没有属性名称注释

时间:2016-11-11 09:29:55

标签: java json parsing jackson lombok

我有像这样的json输入

{"results" : [
  {
    "__metadata": {
      "type": "SFOData.User"
    },
    "userId": "1",
    "lastName": "TestUser",
    "division": "Manufacturing (MANU)",
    "department": "Production FR (123123123)",
    "firstName": "Example",
    "manager": {
      "__metadata": {
          "type": "SFOData.User"
      },
      "userId": "321321321"
    }
  }
]}

我想解析这些类的结果对象

@JsonIgnoreProperties(ignoreUnknown = true)
@AllArgsConstructor
@NoArgsConstructor
private class StagingUser {

    @Getter
    @Setter
    private Long userId;

    @Getter
    @Setter
    private String lastName;

    @Getter
    @Setter
    private String division;

    @Getter
    @Setter
    private String firstName;

    @Getter
    @Setter
    private String department;

    @Getter
    @Setter
    private StagingManager manager;
}

@JsonIgnoreProperties(ignoreUnknown = true)
@AllArgsConstructor
@NoArgsConstructor
private class StagingManager {

    @Getter
    @Setter
    private Long userId;
}

我尝试像这样解析它

final ObjectNode node = mapper.readValue(result.getBody(), ObjectNode.class);

users = mapper.readValue(node.get("results").toString(), mapper.getTypeFactory().constructCollectionType(List.class, StagingUser.class));

错误是

Argument #6 of constructor [constructor for my.package.Obj$StagingUser, annotations: {
  interface java.beans.ConstructorProperties=@java.beans.ConstructorProperties(
      value=[userId, lastName, division, firstName, department, manager]
  )
}] 
has no property name annotation; must have name when multiple-parameter constructor annotated as Creator

1 个答案:

答案 0 :(得分:1)

我认为问题在于嵌套类不是静态的。对于非静态嵌套类,引入了包含对外部类实例的引用的额外参数。 ON MATCH SET没有此参数的名称,编译器会将其添加到参数列表中。实际上,@ConstructorProperties中的所有名称都是一个名字。

您是否知道您还可以将@ConstructorProperties@Getter放在课堂上?