Похожие чаты

I am writing a REST API which accepts a JSON

as input. Spring Boot automatically converts it into a POJO. However, the JSON that I have has the following structure.

{
"strategy": "STRATEGY_NAME",
"data" : {}
}

The problem is, depending on the strategy, the data object will change. Any way to handle this?

2 ответов

10 просмотров

Your DTOs for each strategy have to extend from same base class, at least that "strategy" property. Otherwise you would end up writing your controller to accept Object param. So you have basically several options: - use @JsonComponent to register your custom codec, the most low-level solution - use jackson annotations, here's nice article I've just found, @JsonDeserialize and @JsonDeserialize are low-level variants of @JsonComponent - use jackson polymorphism support (again that nice article has it described https://www.baeldung.com/jackson-annotations#jackson-polymorphic-type-handling-annotations) - rethink your api design, and maybe you actually don't want dive into polymorphism; this may be the case if that number of strategies is huge, and/or there are not strict and clear boundaries between those strategies; in that case jackson has nice @JsonAnySetter which is exactly for this case

Well, to be less ambiguous. If you're 100% sure about your api, then in your exact case I would suggest using jackson polymorphic stuff (@JsonTypeInfo, @JsonSubType etc). Other options are nice to know, but polymorpic jackson annotations suit best for that particular case

Похожие вопросы

Обсуждают сегодня

@LGCYMan @JustinKKW Q/A List 1. this part confuses me on #8: "From there, a bridge between erc20 LGXY and erc20 LGXY will be out once that swap is closed." does this mean ...
Sig | LGCY | BattleVerse L1 | BitWin
1
Did @Beeker really get banned? That's ridiculous. He's one of the few left here with half a brain and you might not always like his narrative @dgb_ycagel , but he often keeps ...
Leroy Gerrits
1
async login(req: Request, res: Response, next: NextFunction): Promise<void> { try { const { errors, input } = await RequestValidator(LoginRequest, req.body...
. .
1
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Hello guys, I have staked Matic as stMatic via Lido nearly a year ago and recently I wanted to unstake but the platform offered me to unstake via Kyberswap for a faster trans...
Mike
7
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
A couple thoughts from a random internet stranger: 1. If you want this project to gain traction you cannot keep being negative. If I just came here after finding out about Kd...
Eric Wild
46
We heading to 1.1$ 🤔?
CryptoBo$$
35
lazarus-3.2.0/gtk, linux патч "имя проекта по умолчанию project1 -> prj" день добрый не нравится "именя проекта по умолчанию" (project1), к.раз приходится переименовывать (н...
livontiy
5
Карта сайта