我有这样的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

最佳答案

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

您知道吗,您还可以在课程中加入@Getter@Setter

07-24 09:45
查看更多