Skip to content

Commit

Permalink
Merge pull request #19432 from gastaldi/jackson_serialization
Browse files Browse the repository at this point in the history
Support serialization inclusion configuration in Jackson
  • Loading branch information
gsmet authored Aug 17, 2021
2 parents d851f40 + 443965e commit 057935e
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import java.time.ZoneId;
import java.util.Optional;

import com.fasterxml.jackson.annotation.JsonInclude;

import io.quarkus.runtime.annotations.ConfigItem;
import io.quarkus.runtime.annotations.ConfigRoot;

Expand Down Expand Up @@ -43,4 +45,10 @@ public class JacksonBuildTimeConfig {
*/
@ConfigItem(defaultValue = "UTC")
public Optional<ZoneId> timezone;

/**
* Define which properties of Java Beans are to be included in serialization.
*/
@ConfigItem
public Optional<JsonInclude.Include> serializationInclusion;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import java.time.ZoneId;

import com.fasterxml.jackson.annotation.JsonInclude;

public class JacksonConfigSupport {

private final boolean failOnUnknownProperties;
Expand All @@ -14,13 +16,16 @@ public class JacksonConfigSupport {

private final ZoneId timeZone;

private JsonInclude.Include serializationInclusion;

public JacksonConfigSupport(boolean failOnUnknownProperties, boolean failOnEmptyBeans, boolean writeDatesAsTimestamps,
boolean acceptCaseInsensitiveEnums, ZoneId timeZone) {
boolean acceptCaseInsensitiveEnums, ZoneId timeZone, JsonInclude.Include serializationInclusion) {
this.failOnUnknownProperties = failOnUnknownProperties;
this.failOnEmptyBeans = failOnEmptyBeans;
this.writeDatesAsTimestamps = writeDatesAsTimestamps;
this.acceptCaseInsensitiveEnums = acceptCaseInsensitiveEnums;
this.timeZone = timeZone;
this.serializationInclusion = serializationInclusion;
}

public boolean isFailOnUnknownProperties() {
Expand All @@ -42,4 +47,8 @@ public boolean isAcceptCaseInsensitiveEnums() {
public ZoneId getTimeZone() {
return timeZone;
}

public JsonInclude.Include getSerializationInclusion() {
return serializationInclusion;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ public JacksonConfigSupport get() {
jacksonBuildTimeConfig.failOnEmptyBeans,
jacksonBuildTimeConfig.writeDatesAsTimestamps,
jacksonBuildTimeConfig.acceptCaseInsensitiveEnums,
jacksonBuildTimeConfig.timezone.orElse(null));
jacksonBuildTimeConfig.timezone.orElse(null),
jacksonBuildTimeConfig.serializationInclusion.orElse(null));
}
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import javax.enterprise.inject.Produces;
import javax.inject.Singleton;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
Expand Down Expand Up @@ -43,6 +44,10 @@ public ObjectMapper objectMapper(Instance<ObjectMapperCustomizer> customizers,
if (jacksonConfigSupport.isAcceptCaseInsensitiveEnums()) {
objectMapper.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS);
}
JsonInclude.Include serializationInclusion = jacksonConfigSupport.getSerializationInclusion();
if (serializationInclusion != null) {
objectMapper.setSerializationInclusion(serializationInclusion);
}
ZoneId zoneId = jacksonConfigSupport.getTimeZone();
if ((zoneId != null) && !zoneId.getId().equals("UTC")) { // Jackson uses UTC as the default, so let's not reset it
objectMapper.setTimeZone(TimeZone.getTimeZone(zoneId));
Expand Down

0 comments on commit 057935e

Please sign in to comment.