Skip to content

Instantly share code, notes, and snippets.

@abhi2495
Last active July 19, 2020 20:33
Show Gist options
  • Save abhi2495/a73cc4e797f3b0eebccc06b1e4f0da73 to your computer and use it in GitHub Desktop.
Save abhi2495/a73cc4e797f3b0eebccc06b1e4f0da73 to your computer and use it in GitHub Desktop.

Use Case:

  • A third party library is responsible for serializing or deserializing the object eg. custom serialization of api response contracts in a spring webapplication. i.e the ObjectMapper cannot be accessed and configured directly
  • We want to serialize instances of only one class.

How am I doing it

  • Using @JsonSerialize at class level to register a custom serializer for instances of that class.
/*
##################################################################################
##################################################################################
######### IF YOU FOUND THIS GIST USEFUL, PLEASE LEAVE A STAR. THANKS. ############
##################################################################################
##################################################################################
*/
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.time.ZoneOffset;
public class EventSerializer extends JsonSerializer<Event> {
@Override
public void serialize(Event event, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("name", event.getName());
String startDateWithZone = event.getStartDate().atZone(ZoneOffset.UTC).toString();
jsonGenerator.writeStringField("startDate", startDateWithZone);
String endDateWithZone = event.getEndDate().atZone(ZoneOffset.UTC).toString();
jsonGenerator.writeStringField("endDate", endDateWithZone);
jsonGenerator.writeEndObject();
}
}
@JsonSerialize(using = EventSerializer.class)
public class Event {
private String name;
private LocalDateTime startDate;
private LocalDateTime endDate;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public LocalDateTime getStartDate() {
return startDate;
}
public void setStartDate(LocalDateTime startDate) {
this.startDate = startDate;
}
public LocalDateTime getEndDate() {
return endDate;
}
public void setEndDate(LocalDateTime endDate) {
this.endDate = endDate;
}
}
Event event = new Event();
event.setName("someEvent");
event.setStartDate(LocalDateTime.now());
event.setEndDate(LocalDateTime.now().plusDays(1));
System.out.println(new ObjectMapper().writeValueAsString(event));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment