Hello Tatu,

I found this *post* 
<https://stackoverflow.com/questions/37010891/how-to-map-a-nested-value-to-a-property-using-jackson-annotations>
 on 
*stackoverflow *which matches the exact scenario I was trying to explain 
you. It says: The actual JSON response I'm trying to parse is very complex, 
and I don't want to have to create an entire new class for every sub-node, 
even though I only need a single field.
This page led me to a library called *Elastic Path's JSON Unmarshaller* 
<https://github.com/elasticpath/json-unmarshaller> . It will solve my 
problem, but just wanted to make sure with you if this library is stable 
and recommended?
Please comment on this.

Thanks a lot..! 



On Monday, September 11, 2017 at 12:55:28 AM UTC+5:30, chetan choulwar 
wrote:
>
> You can consider my API as a proxy for connecting to different APIs 
> providing similar kinda data represented in somewhat different way than 
> each other. 
>
> 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.

Reply via email to