【问题标题】:Jackson fails to parse nested object with exception Constructur Argument #6 has no property name annotationJackson 无法解析嵌套对象,出现异常 Constructur Argument #6 has no property name annotation
【发布时间】:2016-11-11 09:29:54
【问题描述】:

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

【问题讨论】:

  • 您的 json 格式不正确,您需要用 { } 括起来
  • 它只是为了更好地展示而缩小了

标签: java json parsing jackson lombok


【解决方案1】:

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

您是否知道您也可以在课堂上添加@Getter 和@Setter?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 2021-02-15
    • 2017-01-07
    • 1970-01-01
    • 2019-04-02
    相关资源
    最近更新 更多