我有这个 JSON,我想用它生成对象。
{
"responseId": "response-id",
"session": "projects/project-id/agent/sessions/session-id",
"queryResult": {
"queryText": "End-user expression",
"parameters": {
"orderNumber": "PQL7648194AAAAA",
"lastName": "RIVERO"
},
"action": "order",
"allRequiredParamsPresent": true,
"intent": {
"name": "projects/project-id/agent/intents/intent-id",
"displayName": "[InfoVuelo] Dia-hora de salida - datos de orden"
},
"languageCode": "es"
},
"originalDetectIntentRequest": {}
}
“参数”字段是可变的。例如,对于一种情况,参数可以是
{
"parameters": {
"email":"example@example.com"
}
}
另外,我也可以
{
"parameters": {
"orderNumber": "PQL7648194AAAAA",
"lastName": "RIVERO"
}
}
我创建了一个Parameters
类和2个扩展Parameters
的类(OrderNumberAndLastNameParams
和EmailParams
)
public class EmailParams implements Parameters {
private String email;
}
public class OrderNumberLastNameParams implements Parameters {
private String orderNumber;
private String lastName;
}
我使用给定 JSON 文件创建对象的方法
public static <T> T buildBodyFromJson(String filePath, Class<T> clazz) {
ObjectMapper myMapper = new ObjectMapper();
T jsonMapper = null;
try {
jsonMapper = myMapper.readValue(new ClassPathResource(filePath).getInputStream(), clazz);
} catch (IOException e) {
fail(e.getLocalizedMessage());
}
return jsonMapper;
}
但是当我尝试构建对象时,它尝试实例化 Parameter
对象,而不是子对象获取“无法识别的字段...未标记为可忽略”
。
最佳答案
据我了解,您实际上并不需要两个单独的类,问题是您需要使用该对象生成一个不包含 null/空字段的 requestbody。 嗯,有一个注释可能会对您有所帮助。
为具有所有 3 个属性的参数创建一个类,并使用 @JsonInclude(JsonInclude.Include.NON_EMPTY) 进行注释
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Parameters {
private String email;
private String orderNumber;
private String lastName;
}
此注释会使空字段或 null 字段不会出现在您正在创建的请求正文中。
关于java - 使用多态性从 JSON 生成对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61021451/