Следующий вопрос может быть слишком наивным, но, пожалуйста, помогите мне найти решение этой проблемы.
Я работаю над API Java RESTful, куда я отправляю формат ответа в формате JSON. Поскольку необходимо разработать несколько API, я подумал о том, чтобы сохранить некоторые общие переменные в абстрактных классах и использовать их везде, где это возможно. Ниже приведены 2 абстрактных класса, которые я разработал.
public @Data abstract class AbstractEntityWebServResDTO<D> {
// Attributes
//////////////
protected Date createdDt;
protected String createdBy;
protected Date updatedDt;
protected String updatedBy;
}
public @Data abstract class AbstractModifyWebServReqDTO<D> {
// Attributes
//////////////
protected boolean delete;
protected boolean modify;
}
Некоторые примеры ответных DTO.
public @Data class ResponseFormat1 extends AbstractEntityWebServResDTO<ResponseFormat1>{
protected String response1Data;
}
Это приведет к JSON:
{
"response1Data": "SOME DATA",
"createdDt": "2019-11-02 23:33:23",
"createdBy": "USERID",
"updatedDt": "2019-11-02 23:33:23",
"updatedBy": "USERID"
}
ДругойПример ответа DTO
public @Data class ResponseFormat2 extends AbstractModifyWebServReqDTO<ResponseFormat2>{
protected String response2Data;
}
Это приведет к JSON:
{
"response2Data": "SOME DATA",
"delete": true,
"modify": false
}
Как показано выше, классы расширяют различные классы Abstract, которые имеют к ним отношение. Но в некоторых случаях мне потребуется использовать все переменные, присутствующие в обоих абстрактных классах. Поскольку мы не можем расширить 2 абстрактных класса, как я могу этого достичь?
Решения, о которых я думал:
- Создание единого абстрактного класса со всеми переменными и его использование. Но так как я использую FasterXML для преобразования DTO в формат JSON. Это приведет все нежелательные переменные в формате ответа.
- Расширение Abstract с другим классом Abstract. Расширяющий класс будет производить тот же формат JSON с нежелательными переменными в нем.
- Создание интерфейсов с переменными - но переменные внутри интерфейсов должны быть статическими или конечными.
Помогите, пожалуйста, выделить какое-либо доступное решение, чтобы избежать отправки нежелательных ключей в JSON?