Specify jackson serialization as an object method

f.khantsis

I am looking for a class to implement its own json serialization in a method. I guess it could extend JsonSerializer<Itself>, but that's a little heavy. Is there any other way?

This is what I am looking for.

public class MyClass {

   private int fieldA;
   private String fieldB;

   @JsonSerializer
   public void serialize(JsonGenerator gen, SerializationProvider prov){
     gen.writeField(...)
   }
}

Is there such functionality?

Philippe Fery

I've adapted the answer. I guess it's closer to what you are looking for?

import java.io.IOException;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;

@JsonSerialize(using = MyClass2.class)
class MyClass2 extends StdSerializer<MyClass2> {
    protected int fieldA;
    protected String fieldB;

    public MyClass2() {
        super(MyClass2.class);
    }

    public void setFieldA(int fieldA) {
        this.fieldA = fieldA;
    }

    public void setFieldB(String fieldB) {
        this.fieldB = fieldB;
    }

    @Override
    public void serialize(MyClass2 value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeStartObject();
        gen.writeNumberField("fieldA", value.fieldA);
        gen.writeStringField("fieldB", value.fieldB);
        gen.writeEndObject();
    }
}

A simple main class to test serialization:

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class TestAutoSerializer2 {

    public TestAutoSerializer2() {
        super();
    }
    
    public void testInnerSerializer2() {
        MyClass2 myClass2 = new MyClass2();
        myClass2.setFieldA(100);
        myClass2.setFieldB("StackOverflow");

        String serialized;
        try {
            serialized = new ObjectMapper().writeValueAsString(myClass2);
            System.out.println(getClass().getName()+" serialized to "+serialized);
        } catch (JsonProcessingException e) {
            System.out.println("Cannot serialize");
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        TestAutoSerializer2 tester = new TestAutoSerializer2();
        tester.testInnerSerializer2();
    }
}

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

Jackson ObjectMapper - specify serialization order of object properties

Jackson Custom Serialization to Flatten Object

Jackson JSON Modify Object Before Serialization

Jackson YAML Serialization Object Arrays Format

Jackson: Map<String, Object> serialization and deserialization

Specify protocol of object in method parameters

Jackson naming convention issue in serialization with uncommon getter method name

GWT-Jackson-APT not ignoring interface object from serialization

Jackson serialization from Object to Xml for Character data type

Jackson serialization. Force to wrap each field as object

Jackson: How to Detect Modified Object after Deserialization and Serialization?

Can I specify the jackson @JsonView to use for method result transformation in RestEasy?

Jackson Serialization issue with CommonsMultipartFile

Jackson Serialization Ignore Timezone

Jackson custom serialization and deserialization

Jackson Modules for Map Serialization

Jackson field based serialization

jackson serialization with recursive structure

Jackson Json serialization

jackson serialization of nested objects

Jackson serialization of Map of objects

Hibernate and Jackson lazy serialization

Jackson Subclass serialization

Kotlin Jackson serialization issue

Parameter serialization — specify namespace

Recommended method for object typing under consideration of factory functions and serialization

How to include object in Ruby attributes method (ActiveModel::Serialization)?

Can I build object json in serialization (newton) from a method?

Specify jackson writter schema