Я пытаюсь создать POJO с отношением к другому POJO с помощью API-интерфейса Oracle APEX ORDS RESTful.
Контекст
Позвольте мне начать с объяснения контекста, с которым мне приходится иметь дело.
Рассмотрим следующие 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)
);
Шаблон URI ORDS ../brand/{brand_ID}/pencils
и использует следующий источник обработчика запроса get с типом источника «Запрос»:
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": "..."
}
}
Вопрос
При чтении этого JSON на стороне клиента, где создаются POJO, я столкнулся с проблемой. Я могу получить для свойства length экземпляров Pencil правильное значение. Однако свойство color экземпляра Pencil останется null
. Я думаю, это потому, что свойства JSON красный, зеленый и синий неизвестны Карандашу и поэтому игнорируются. Если я прав в этом, то у меня может быть два решения, но я не знаю, как их достичь.
Несколько возможных решений
- Назначьте свойства класса Color с помощью аннотаций и прекратите их игнорировать, укажите, где они могут быть использованы.
- Каким-то образом добавьте объект JSON к каждому элементу массива в ответе с ключом
color
и свойствами класса Color.