java - 反序列化 JSON 以创建 POJO 和相关参考
问题描述
我正在尝试使用 Oracle APEX ORDS RESTful API 创建一个与另一个 POJO 相关的 POJO。
上下文
让我从解释我必须处理的上下文开始。
考虑以下 POJO:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Brand {
private Pencil[] pencils;
// standard getters and setters
}
@JsonIgnoreProperties(ignoreUnknown = true)
public class Pencil {
private int length;
private Brand brand;
private Color color;
// standard getters and setters
}
@JsonIgnoreProperties(ignoreUnknown = true)
public class Color {
private int red;
private int green;
private int blue;
// standard getters and setters
}
APEX 中的数据库结构如下所示:
CREATE TABLE Brand (
id int NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE Pencil (
id int NOT NULL,
length int NOT NULL,
brand_id int NOT NULL,
color_id int NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (brand_id) REFERENCES Brand(id),
FOREIGN KEY (color_id) REFERENCES Color(id)
);
CREATE TABLE Color (
id int NOT NULL,
red int NOT NULL,
green int NOT NULL,
blue int NOT NULL,
PRIMARY KEY (id)
);
ORDS URI 模板../brand/{brand_ID}/pencils
使用以下获取请求处理程序源,源类型为“Query”:
SELECT p.length, c.red, c.green, c.blue FROM pencil p
LEFT OUTER JOIN color c ON c.id = p.color_id
WHERE p.brand_id = :brand_ID
请求可能会返回类似于以下 JSON 的内容:
{
"items": [
{
"length": 100,
"red": 150,
"green": 200,
"blue": 250,
},
{
"length": 50,
"red": 100,
"green": 150,
"blue": 200,
}
],
"first:" {
"$ref": "..."
}
}
问题
在创建 POJO 的客户端读取此 JSON 时,我遇到了一个问题。我能够将 Pencil 实例的长度属性设置为正确的值。但是 Pencil 实例的颜色属性将保持不变null
。我猜这是因为 Pencil 不知道 JSON 属性红色、绿色和蓝色,因此被忽略了。如果我是正确的,那么我可能有两种解决方案,但对于那些我不知道如何实现它们的解决方案。
几种可能的解决方案
- 通过注解定位 Color 类的属性并停止忽略它们,声明它们可以用于何处。
color
不知何故,使用 Color 类的键和属性将 JSON 对象添加到响应中的每个数组项。
解决方案
我认为您可以尝试一些事情。
您可以修改 json 响应对象以匹配您的数据建模 POJO。
如果您无法修改 json 响应以匹配您的客户端数据建模,您可以创建一个与 json 响应匹配的 JsonDto,然后根据需要使用 JsonDto 手动构建您的 POJO。
希望这可以帮助。:)
推荐阅读
- swift - 从 swift 调用 nettop:“无法分配内核控制套接字”
- r - 对于 rms 上的受限三次样条,如何在每次连续增加几率时找到 X 的值?
- android-jetpack-compose - AnimatedVisibility 打破了 Jetpack Compose 中 ConstraintLayout 中的约束
- hybris - 如何自定义 ItemModelCloneCreator.class 以获取所有属性,例如价格和税收以及变体产品和属性
- javascript - 如何在 Truffle 中初始化迁移合同?
- typescript - 如何将任何类型的属性转换为 TypeScript 中的可调用对象?
- haskell - 有没有办法隐藏gcd?
- unit-testing - 如何在 Flask 中对路由进行单元测试
- julia - Julia 幂运算符 ^ 返回与 python pow() 不同的值
- android - 带有注入的匕首视图模型中的屏幕旋转问题