我有以下 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
的实例(没有创建者,如默认构造函数,存在):无法从对象值反序列化(没有基于委托或属性的创建者
您提供的根 JSON 仅包含一个
testSuite
字段,而不是 actions
期望的 DeviceActionList
。您需要创建一个包装类,其中包含一个名为 testSuite
且类型为 DeviceActionList
的字段,并从那里反序列化 JSON:
@AllArgsConstructor
public class TestSuite {
DeviceActionList testSuite;
}
objectMapper.readValue(testInputString, TestSuite.class)