2016-11-11 5 views
0

У меня есть вход JSon как этотДжексон не в состоянии разобрать вложенный объект, за исключением Constructur Аргумент №-не имеет имя свойства аннотации

{"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 [email protected]es(
     value=[userId, lastName, division, firstName, department, manager] 
) 
}] 
has no property name annotation; must have name when multiple-parameter constructor annotated as Creator 
+0

Ваш json не в правильном формате, который вам нужно приложить с помощью {} –

+0

, он просто уменьшен для лучшей витрины –

ответ

1

Я думаю, проблема в том, что вложенный класс не является статическим. Для нестатических вложенных классов вводится дополнительный параметр, содержащий ссылку на экземпляр внешнего класса. @ConstructorProperties не имеет имени для этого параметра, который добавляется компилятором в список параметров. На самом деле, все имена в @ConstructorProperties отключены одним.

Знаете ли вы, что вы можете положить @Getter и @Setter на свой класс?

+0

Создание статического класса на самом деле сработало для меня. –