even moving annotation to the field did not work.
Note I have annotated class ItemRow class which ofcourse i can't since it 
is part of legacy code.

On Friday, December 21, 2018 at 12:49:21 PM UTC-8, Tatu Saloranta wrote:
>
> On Fri, Dec 21, 2018 at 12:06 AM matt Smith <matt.smi...@gmail.com 
> <javascript:>> wrote: 
> > 
> > so I have made this wrapper and annotated getter with @JsonSerialize. 
> however, I do not see it being applied. what is wrong here? 
>
> That looks like it should work. If not, a unit test & issue would make 
> sense. 
>
> -+ Tatu +- 
>
> > 
> > public class Wrapper { 
> > 
> > 
> >     private Map<RecordDomain, ItemRow> foo; 
> > 
> > 
> >     public Wrapper(Map<RecordDomain, ItemRow> fooz) { 
> >         foo = new HashMap<>(fooz); 
> >     } 
> > 
> > 
> >     @JsonSerialize( contentUsing = ItemRowSerializer.class) 
> >     public Map<RecordDomain, ItemRow> getFoo() { 
> >         return foo; 
> >     } 
> > 
> > 
> >     public void setFoo(Map<RecordDomain, ItemRow> foo) { 
> >         this.foo = foo; 
> >     } 
> > } 
> > 
> > 
> > On Thursday, December 20, 2018 at 1:25:59 PM UTC-8, Tatu Saloranta 
> wrote: 
> >> 
> >> On Thu, Dec 20, 2018 at 11:22 AM matt Smith <matt.smi...@gmail.com> 
> wrote: 
> >> > 
> >> > I encountered a case where class level JsonSerializable annotation 
> does not require registration with Simple Module  but method level does. 
> >> 
> >> Hmmh. This seems odd, let's see. 
> >> 
> >> > Here is the example I tried 
> >> > 
> >> > @JsonSerialize(using = ItemRowSerializer.class ) 
> >> >         private ItemRow tes 
> >> > tItem(){ 
> >> >             return new ItemRow("abc", Arrays.asList("item1", "item2", 
> "item3")); 
> >> >         } 
> >> > 
> >> > 
> >> > I test it out like this 
> >> > 
> >> > 
> >> > String jsonResult =  new 
> ObjectMapper().writeValueAsString(testItem()); 
> >> > System.out.println(jsonResult); 
> >> > 
> >> > I noticed that jsonString did not serialize using ItemRowSerializer. 
> >> 
> >> Ah. No, it won't. Jackson does not see you calling the method; Jackson 
> >> sees the object you pass, which was returned by the method. There is 
> >> no linkage there: Jackson can only introspects classes you pass to it. 
> >> 
> >> > However, when I did this, it gave the expected jsonString 
> >> > 
> >> > 
> >> > SimpleModule module = new SimpleModule() 
> >> >  module.addSerializer(ItemRowSerializer.class) 
> >> >  mapper.register(module); 
> >> >  String jsonResult =  new 
> ObjectMapper().writeValueAsString(testItem()); 
> >> >  System.out.println(jsonResult); 
> >> > 
> >> > 
> >> > On the otherhand, if I had my ItemRow class annoated with 
> @JsonSerializable,  there was no need with module at all. 
> >> 
> >> I think you mean `@JsonSerialize` here (there is interface type 
> >> `JsonSerializable`, but no annotation). 
> >> 
> >> > i.e 
> >> > 
> >> > @JsonSerializable(using = ItemRowSerailizer 
> >> > public class ItemRow<T> {...} 
> >> > 
> >> > 
> >> > Since I am passing this serialized object over the wire, I do not 
> prefer to write to mapper and send string representation across. 
> >> > 
> >> > how would I go about getting method level annotation working without 
> module registration? 
> >> 
> >> Method level annotations only work when property is accessed via 
> >> method (or field) in question. 
> >> 
> >> So if you had something like: 
> >> 
> >> public class Rows 
> >>    @JsonSerialize(using = .... ) 
> >>    public ItemRow<Type> getRows() { ... } 
> >> } 
> >> 
> >> and serialized an instance of `Rows`, serializer would be found. But 
> >> for root values, there is no such reference. 
> >> 
> >> On related note, I strongly recommend always using a wrapper type 
> >> around generic values, so that root value is never of generic type. 
> >> Reason for this is that Java Type Erasure will often cause problems if 
> >> attempting to pass an instance of generic type -- so Jackson can not 
> >> detect intended type (all it sees is type variable from class 
> >> declaration). 
> >> 
> >> So, attempts to serialize, say, Row<T>, will be seen as `Row<?>`, and 
> >> possibly (although not always) cause issues in finding handlers for 
> >> the type -- for example, if value type has annotations, they may not 
> >> be visible. 
> >> 
> >> -+ Tatu +- 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> Groups "jackson-user" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> an email to jackson-user...@googlegroups.com <javascript:>. 
> > To post to this group, send email to jackso...@googlegroups.com 
> <javascript:>. 
> > For more options, visit https://groups.google.com/d/optout. 
>

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

Reply via email to