转换为POJO时,嵌套Json对象返回Null



我有下面的JSON,我正试图将其读取到JSON节点中,然后映射到Java POJO对象。

{
"operation": "myoperation",
"input": {
"environment": "myEnv",
"stage": "beta"
}
}

以下是POJO级

@JsonIgnoreProperties(ignoreUnknown = true)
public class Input {
private String environment;
private String stage;
public String getEnvironment() {
return apolloEnvironment;
}
public String getStage() {
return stage;
}
}

当我使用下面的映射读取上面的树时,我得到了环境和阶段属性的null

Input myInput = OBJECT_MAPPER.treeToValue(inputJson, Input.class);
System.out.println(myInput.getEnvironment()); //returns null
System.out.println(myInput.getStage()); //returns null

我想阅读环境和阶段属性值,如何使用上述逻辑来实现这一点?

JSON中的Input对象由另一个对象包装。因此,您不需要尝试将整个Tree解析为Input,而是需要获得映射到属性input的Value,然后对其进行解析

注意setter应该位于Input类中

String jsonString = """
{
"operation": "myoperation",
"input": {
"environment": "myEnv",
"stage": "beta"
}
}
""";
ObjectMapper mapper = new ObjectMapper();        
JsonNode node = mapper.readTree(jsonString).get("input");

Input myInput = mapper.treeToValue(node, Input.class);
System.out.println(myInput.getEnvironment());
System.out.println(myInput.getStage());

输出:

myEnv
beta

另一种选择是声明另一个类,包装Input,比方说InputWrapper。将允许将JSON直接反序列化到InputWrapper实例中,然后通过getter方法访问嵌套的Input

以下是这样的包装器类的样子(为了简洁起见,使用了Lombok的注释):

@Setter
@Getter
public static class InputWrapper {
private String operation;
private Input input;
}
@Setter
@Getter
public static class Input {
private String environment;
private String stage;
}

解析逻辑:

String jsonString = """
{
"operation": "myoperation",
"input": {
"environment": "myEnv",
"stage": "beta"
}
}
""";
ObjectMapper mapper = new ObjectMapper();        
InputWrapper inputWrapper = mapper.readValue(jsonString, InputWrapper.class);
Input myInput = inputWrapper.getInput();

System.out.println(myInput.getEnvironment());
System.out.println(myInput.getStage());

输出:

myEnv
beta

最新更新