java - Jackson 无法解析嵌套对象,异常构造参数 #6 没有属性名称注释

标签 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

最佳答案

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

您是否知道您还可以将 @Getter@Setter 放在类上?

关于java - Jackson 无法解析嵌套对象,异常构造参数 #6 没有属性名称注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40544888/

相关文章:

Java SparkSession Hive SQL 没有应用 regexp_replace

java - 对象可以在 OOP 中定义新的兄弟类或子类吗?为什么或者为什么不?

java - 在 webview Activity 上打开 Json url

php - Laravel-将Guzzle JSON响应保存到数据库

c++ - 从也包含字符串的 .txt 文件中读取整数和 double

regex - 解析多行变长日志文件

javascript - 我如何将此 PCRE 正则表达式转换为 ECMAScript (JS) 正则表达式以解析街道号码和地址?

java - Java中从矩阵中间开始递减的数字

javascript - 从 JSON 中检索值

java - 使用 JSTL 设置 HTML 下拉选择选项