Two standard features that could help:

1. If class implement `JsonSerializable`, its

    public void serialize(JsonGenerator gen, SerializerProvider
serializers) throws IOException;

will be called to allow you to properly serialize it using generator
that is property configured

2 If a method of the class is annotation with `@JsonValue`, its return
value is serialized instead of instance itself:
   often return value is something generic like `Map` or `ObjectNode`,
but could be some other POJO too, in case
   transformations or clean up is needed

-+ Tatu +-



On Sun, Apr 15, 2018 at 9:16 AM,  <kristjankela...@gmail.com> wrote:
> I know I can use (new ObjectMapper()).convertValue(this, ObjectNode.class)
> to serialise given object to JSON. Is there a way to tell the lib to use a
> method inside that class to serialise it ?
>
>
> My classes:
>
>
> interface A {
>   ObjectNode toJSON();
> }
>
> abstract class Tokens {
>   Map<String, String> tokends;
> }
>
> class Foo extends Tokens implements A {
>   private long id;
>   private Bar bar;
>
>   // Constructors, getters & setters...
>
>   @Override
>   public ObjectNode toJSON() {
>     ObjectNode node = (new ObjectMapper()).convertValue(this,
> ObjectNode.class);
>     tokens.forEach(node::put);
>
>     return node;
>   }
> }
>
> class Bar extends Tokens implements A {
>   private long id;
>
>   // Constructors, getters & setters...
>
>   @Override
>   public ObjectNode toJSON() {
>     ObjectNode node = (new ObjectMapper()).convertValue(this,
> ObjectNode.class);
>     tokens.forEach(node::put);
>
>     return node;
>   }
> }
>
>
>
> Now if I call (new A()).toJSON() I will get:
>
>
> {
>   "id": 1,
>   "bar": {
>     "id": 2
>   },
>   "token1": "...",
>   "token2": "...:,
> }
>
>
> Instead of:
>
> {
>   "id": 1,
>   "bar": {
>     "id": 2,
>     "token3": "...",
>     "token4": "..."
>   },
>   "token1": "...",
>   "token2": "...:,
> }
>
>
> I understand that this happens because the first method modifies the
> serialised class but is not called by jackson when it goes into child
> objects.
>
> Is there a way to tell jaskson to use toJSON method to create the child with
> tokens as well ?
>
>
> --
> 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.

-- 
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