Do we have anything like @XMlPath in jackson?

On Tuesday, September 12, 2017 at 3:58:58 PM UTC+5:30, chetan choulwar 
wrote:
>
> This actually sounds good to have one POJO defined for each of the input 
> JSON that is being dealt and that's what the way I was thinking but was not 
> able to map nested json elements to shallow (class level) pojo 
> properties(To avoid multiple POJOs for nested json objects). Well now that 
> I've this elastic library at hand I can have one POJO defined for each 
> input json and can use polymorphic deserialization then.
>
> Thanks a lot for your inputs Tatu..!:)
>
> On Tuesday, September 12, 2017 at 4:03:34 AM UTC+5:30, Tatu Saloranta 
> wrote:
>>
>> On Sun, Sep 10, 2017 at 12:19 PM, chetan choulwar <[email protected]> 
>> wrote: 
>> > Okay..Let me help you with one real time example. Consider for an 
>> example 
>> > different tv channels have exposed their APIs to get list of programs 
>> > telecast-ed on them. And now suppose I'm trying to expose one APIs that 
>> will 
>> > accept channel name and provide the list of programs for that 
>> particular 
>> > channel by calling it from my API and converting the response received 
>> in my 
>> > own format (a common one). The kind of data I'm getting from different 
>> APIs 
>> > is same but their representation is somewhat different, and what I want 
>> to 
>> > do is to convert these responses into a common format defined by my API 
>> and 
>> > send it as a response from my API. 
>> > So now that I'm sure that I'm dealing with same kinda data represented 
>> > somewhat different, is it okay to convert it into common format? 
>>
>> Yes, but I don't think you should try to use just one single Java 
>> class for all of that. 
>>
>> It makes sense to use one class for representing output to your users, 
>> but I think that if input structures, names vary, 
>> then POJOs to map them to should be different too. You may reuse some 
>> of those for "similar enough" inputs, 
>> but there are limits to how far this helps. 
>> I mean, you will always have to do some work anyway when adopting new 
>> inputs -- even if just adding annotations. 
>> So question there becomes: what approaches is easiest, most reliable 
>> to maintain? 
>>
>> > Currently I'm doing this by mapping each of the responses to JsonNode 
>> only, 
>> > but every time I add a new common API I need to write different logic 
>> to 
>> > convert the new response into a common one and that to for different 
>> APIs 
>> > I'm calling from my API. 
>> > If any kinda JSON response can be mapped to JsonNode, isn't is possible 
>> to 
>> > map these different responses to any particular format? I mean can I 
>> write 
>> > my resource object in such a way that I'd be able to map these 
>> different 
>> > json responses representing same kinda data to my own resource, in some 
>> way, 
>> > instead of doing manually by traversing through json tree? 
>> > 
>> > Hope it is clear to now..Initially I thought it's impossible, but you 
>> gave 
>> > me direction and I do believe now there'd be some way that I can bind 
>> these 
>> > different resources to common one. May be the way json objects are 
>> mapped to 
>> > JsonNode. 
>> > 
>> > Please let me know if this is clear to you, as right now you the only 
>> hope I 
>> > can see.! 
>> > 
>> > Thank you Tatu..! 
>>
>> It may make sense to map input you get into `JsonNode` and have 
>> separate code to traverse them; 
>> or to have a set of Input POJOs and code to convert from those to 
>> result/output POJO. 
>> There are pros and cons to each approach. 
>>
>> -+ Tatu +- 
>>
>> > 
>> > On Sunday, September 10, 2017 at 10:00:21 PM UTC+5:30, Tatu Saloranta 
>> wrote: 
>> >> 
>> >> On Sat, Sep 9, 2017 at 9:58 PM, chetan choulwar <[email protected]> 
>> >> wrote: 
>> >> > That @JsonAlias worked fine. But my problem is with nested elements, 
>> how 
>> >> > can 
>> >> > I specify nested json element into alias? 
>> >> 
>> >> You can't. If your structures differ beond just naming you need to do 
>> >> something else. 
>> >> Databinding is meant to match incoming document structure to a Java 
>> >> object graph and vice versa. 
>> >> It is not designed to allow arbitrary transformation, or unification 
>> >> of differing structures into single model. 
>> >> 
>> >> It is possible to unify differing structures, of course, but that is 
>> >> true transformation and something explicitly 
>> >> out of scope for Jackson. You can use `JsonNode` as structure modify, 
>> >> for input and output structures, and it is possible 
>> >> to change structure any way you want. But you have to write that 
>> >> transformation yourself. 
>> >> Or you can use separate Java classes for input(s) and output. 
>> >> 
>> >> > And reason for doing so is that I'm writing an API that will send 
>> the 
>> >> > common 
>> >> > response out of all these different APIs I am calling from my API. 
>> >> 
>> >> I am still not sure I fully understand your usage, still; this is very 
>> >> generic explanation. 
>> >> 
>> >> But assuming I do understand... if input data you get from a service 
>> >> differs, you should consider separating handling of your input from 
>> >> constructing your output. Do not try to use same set of objects if 
>> >> structures are not same or similar enough. Trying to do that is false 
>> >> savings and tends to sacrifice clean design for seeming savings. 
>> >> 
>> >> This assuming I actually understood what you are trying to do -- 
>> >> without full explanation of steps from calling another service to 
>> >> formulating output it is possible to misunderstand intent. 
>> >> 
>> >> > Apart from this it'd be great if you can you mail me a link where I 
>> can 
>> >> > find 
>> >> > latest documentation and hands-on for the same. 
>> >> > 
>> >> > Thanking you in anticipation..! 
>> >> 
>> >> Documentation hub is at: 
>> >> 
>> >> https://github.com/FasterXML/jackson-docs 
>> >> 
>> >> and main portal 
>> >> 
>> >> https://github.com/FasterXML/jackson/ 
>> >> 
>> >> has some links. 
>> >> 
>> >> -+ Tatu +- 
>> >> 
>> >> 
>> >> 
>> >> > 
>> >> > 
>> >> > On Sunday, September 10, 2017 at 9:21:55 AM UTC+5:30, Tatu Saloranta 
>> >> > wrote: 
>> >> >> 
>> >> >> On Fri, Sep 8, 2017 at 5:13 AM, chetan choulwar <[email protected]> 
>>
>> >> >> wrote: 
>> >> >> > Thanks a lot for your input. I tried it and it worked as 
>> expected. 
>> >> >> > But 
>> >> >> > I'm 
>> >> >> > stuck at a situation where I want to retrieve a value from nested 
>> >> >> > block, 
>> >> >> > so 
>> >> >> > can you help me out? 
>> >> >> > For example, 
>> >> >> > By calling REST API "https://xyz.com/resources/resource"; gives 
>> me { 
>> >> >> > 
>> >> >> > "value"={"name":"abc.txt"} 
>> >> >> > 
>> >> >> > } 
>> >> >> > and calling "https://abc.com/resources/resource"; gives me 
>> >> >> > {"title":"idontknow.txt"} 
>> >> >> > now how can I take name out from the first json response? 
>> >> >> > 
>> >> >> > Once again thanks a lot for your answer..!:) 
>> >> >> 
>> >> >> I am not sure why my first answer wouldn't work here. All you are 
>> >> >> doing is specifying that property name in json is an alias that can 
>> be 
>> >> >> used for property in POJO, so you would access it with field name 
>> (or 
>> >> >> getter) you have. 
>> >> >> 
>> >> >> But at the same time if these are effectively different objects it 
>> is 
>> >> >> unclear why same Java class should be used anyway -- perhaps they 
>> >> >> should use different POJOs. 
>> >> >> 
>> >> >> -+ Tatu +- 
>> >> >> 
>> >> >> 
>> >> >> > 
>> >> >> > On Friday, September 8, 2017 at 9:19:49 AM UTC+5:30, Tatu 
>> Saloranta 
>> >> >> > wrote: 
>> >> >> >> 
>> >> >> >> On Thu, Sep 7, 2017 at 5:24 AM, chetan choulwar <
>> [email protected]> 
>> >> >> >> wrote: 
>> >> >> >> > Hi All, 
>> >> >> >> > 
>> >> >> >> > I'm calling different REST APIs and getting different kinda 
>> JSON 
>> >> >> >> > responses; 
>> >> >> >> > is there any way to pick particular attribute from different 
>> JSON 
>> >> >> >> > responses 
>> >> >> >> > and map it to a one common property of defined POJO (Resource 
>> for 
>> >> >> >> > my 
>> >> >> >> > API) 
>> >> >> >> > that can then be sent as a response from the REST API that 
>> I've 
>> >> >> >> > exposed? 
>> >> >> >> > 
>> >> >> >> > For Example: 
>> >> >> >> > By calling REST API "https://xyz.com/resources/resource"; 
>> gives me 
>> >> >> >> > {"name":"abc.txt"} 
>> >> >> >> > and calling "https://abc.com/resources/resource"; gives me 
>> >> >> >> > {"title":"idontknow.txt"} 
>> >> >> >> > 
>> >> >> >> > And I have one resource class defined for my APIs to return 
>> i.e. 
>> >> >> >> > MyResource 
>> >> >> >> > { 
>> >> >> >> >    String fileName; 
>> >> >> >> > } 
>> >> >> >> > 
>> >> >> >> > So is there any way that I can map "name"/"title" to fileName 
>> i.e. 
>> >> >> >> > how 
>> >> >> >> > can I 
>> >> >> >> > use jackson to deserialize these jsons to MyResource type? 
>> >> >> >> > 
>> >> >> >> > Please let me know if this is valid? and if yes, how? 
>> >> >> >> 
>> >> >> >> If you have many different names to use, it may be simpler to 
>> just 
>> >> >> >> bind JSON to `Map` or `JsonNode`, and extract value explicitly. 
>> >> >> >> 
>> >> >> >> But if there are just couple of values, you can use `@JsonAlias` 
>> >> >> >> like: 
>> >> >> >> 
>> >> >> >>     public class POJO { 
>> >> >> >>        @JsonAlias({ "name", "title" }) 
>> >> >> >>        public String fileName; 
>> >> >> >>     } 
>> >> >> >> 
>> >> >> >> which would then accept alternate names "name" and "title", but 
>> >> >> >> serialize as "fileName" (which it also accepts). 
>> >> >> >> This annotations was added in Jackson 2.9 
>> >> >> >> 
>> >> >> >> -+ Tatu +- 
>> >> >> > 
>> >> >> > -- 
>> >> >> > You received this message because you are subscribed to the 
>> Google 
>> >> >> > Groups 
>> >> >> > "jackson-dev" group. 
>> >> >> > To unsubscribe from this group and stop receiving emails from it, 
>> >> >> > send 
>> >> >> > an 
>> >> >> > email to [email protected]. 
>> >> >> > For more options, visit https://groups.google.com/d/optout. 
>> >> > 
>> >> > -- 
>> >> > You received this message because you are subscribed to the Google 
>> >> > Groups 
>> >> > "jackson-dev" group. 
>> >> > To unsubscribe from this group and stop receiving emails from it, 
>> send 
>> >> > an 
>> >> > email to [email protected]. 
>> >> > For more options, visit https://groups.google.com/d/optout. 
>> > 
>> > -- 
>> > You received this message because you are subscribed to the Google 
>> Groups 
>> > "jackson-dev" group. 
>> > To unsubscribe from this group and stop receiving emails from it, send 
>> an 
>> > email to [email protected]. 
>> > For more options, visit https://groups.google.com/d/optout. 
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"jackson-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to