嵌套 JSON 的反序列化

问题描述 投票:0回答:1

我有以下 JSON 字符串

final String testInputString = "{"testSuite\":{\"actions\":[{\"actionName\":\"LOGIN\",\"actionAttributes\":{\"emailId\":\"[email protected]\",\"password\":\"password\"}},{\"actionName\":\"PERFORM\",\"actionAttributes\":{\"contentId\":\"gti\",\"contentType\":\"EVENT\"}}]}}";

我正在尝试将其反序列化为

DeviceActionList.class
,请参阅下面的类结构

@Data
@Builder
@AllArgsConstructor
public class DeviceActionList {
    List<DeviceAction> actions;
}

@Data
@Builder
@AllArgsConstructor
public class DeviceAction {
    @NonNull
    private ActionName actionName;
    private ActionAttributes actionAttributes;
}


public enum ActionName {
    LOGIN,
    PERFORM,
    WAIT,
    CLOSE_PLAYBACK
}

public class ActionAttributes {
}

@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@AllArgsConstructor
public class LoginActionAttributes extends ActionAttributes {
    @NonNull
    private String emailId;
    @NonNull
    private String password;
}

@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@AllArgsConstructor
public class PerformActionAttributes extends ActionAttributes {
    @NonNull
    private String contentId;
    @NonNull
    private String contentType;
}

我试过这个

objectMapper.readValue(testInputString, DeviceActionList.class)

然而,这会导致错误,它无法构造

DeviceActionList
的实例(没有创建者,如默认构造函数,存在):无法从对象值反序列化(没有基于委托或属性的创建者

java serialization gson deserialization objectmapper
1个回答
0
投票

您提供的根 JSON 仅包含一个

testSuite
字段,而不是
actions
期望的
DeviceActionList
。您需要创建一个包装类,其中包含一个名为
testSuite
且类型为
DeviceActionList
的字段,并从那里反序列化 JSON:

@AllArgsConstructor
public class TestSuite {
    DeviceActionList testSuite;
}

objectMapper.readValue(testInputString, TestSuite.class)
© www.soinside.com 2019 - 2024. All rights reserved.