java - 使用 FasterXML 解析 Json 以获取通用元素
问题描述
我正在使用 java spring boot 通过 REST api 读取数据。
传入数据指定如下:
public class Element<T>
{
public String error;
public Boolean state;
public T subelement;
}
public class Response<T>
{
public Element<T> element;
}
泛型 T 可以是任何泛型类,例如布尔类或复杂类。
在一个简单的示例中,我尝试解析一个 Response 元素:
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(value, Response<Boolean>.class);
Eclipse 将 Response.class 部分标记为如下:
布尔值无法解析为变量
我习惯于动态使用泛型以便在 Delphi 和 .NET 中进行动态交互。从来没有生成类或传递类型的冲动,因为您可以将 T 分类为一个类,拥有一个空的构造函数并且 json 包装器接受 T 个参数。
由于 JacksonXML 需要一个类,我需要找到解决它的方法。
我在这里尝试了一些关于堆栈溢出的帖子,以通过以下方式获取数据:
- 参数化类型
- JacksonXMLbind Javatype
有任何想法吗?
编辑:
那么它可能基于它看起来不同的列表元素。这是我的 json 示例:
{"id":1,"state":true,"element":{"response":{"data":{"client_id":"sock1591427021","protocol_version":2}}},"errormsg":"OK"}
这部分我用来转换 json :
private <T extends Object> APIResponse<T> readResponse(String data) {
try {
var value = objectMapper.readValue(data, new TypeReference<APIResponse<T>>() {
});
return value;
} catch (Exception e) {
logger.warn(e.getMessage());
return null;
}
}
解决方案
推荐阅读
- flutter - Flutter 在关注 TextField 时会重建之前的路由
- powershell - 合并文件任务 AzureDevops
- angular - i18n 只翻译一行标签
- javascript - NextJS 9 / 阿波罗路由
- vue.js - 如何利用本地组件的数据对象绑定到外部组件
- r - R中的多个数据帧并行功能
- ios - iOS画外音,如何跳过表格视图单元格而不是说“未启用”
- enums - 避免在“枚举”中重复变体名称和类型
- java - java - 如何在Java spring-boot JPA中保存/发布来自JSON键值对的值数组
- javascript - Number.IsNaN 并且没有正确分类变量*数字?