Если вы примете BaseClass
Spring отобразит ваш json на соответствие только BaseClass
, игнорируя все остальные поля. Таким образом, ваша проверка на подклассы не будет работать вообще.
Самое простое решение - принять данные в виде простого текста и после этого вручную попытаться сопоставить их с вашими моделями, используя GSON или что-то подобное, как это
new Gson().fromJson("{
"id": 1,
"sub1": 1
}", SubClass.class);
Но это плохой способ справиться с этим. Ваш подход должен быть изменен архитектурно. Самый простой способ сделать это - ввести data
поле для вашей модели, подобной этой
{
"id": 1,
"data": {
"key": "sub1",
"value": 1
},
},
public Data {
String key;
int value
}
public BaseClass {
int id;
Data data;
}
, таким образом вы сможете проверить
if (abc.data.key.equals("sub1")) {
log.info("abc is sub1");
} else if (abc.data.key.equals("sub1")) {
log.info("abc is sub2");
}
Это потребует немного более сложная дальнейшая реализация, но она будет работать.
Надеюсь, это поможет.