Skip to content

Instantly share code, notes, and snippets.

@dehora
Created November 2, 2016 13:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dehora/5caef12363ce643bbd2c312b6319804b to your computer and use it in GitHub Desktop.
Save dehora/5caef12363ce643bbd2c312b6319804b to your computer and use it in GitHub Desktop.
package org.zalando.fahrschein.domain;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.ByteArrayOutputStream;
import java.util.Collections;
import org.junit.Test;
import static org.junit.Assert.assertFalse;
public class SubscriptionTest {
@Test
public void serializationFailsUnlessFieldsAreMarkedIgnorable() throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
// emulates NakadiClient#subscribe
final Subscription subscription = new Subscription("ss", Collections.singleton("s"), "cg");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
objectMapper.writeValue(baos, subscription);
// bare object mappers serialize nulls
assertFalse(baos.toString().contains("id"));
assertFalse(baos.toString().contains("createdAt"));
}
@Test
public void passesWithConfiguredObjectMapper() throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
// emulates NakadiClient#subscribe
final Subscription subscription = new Subscription("ss", Collections.singleton("s"), "cg");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
objectMapper.writeValue(baos, subscription);
// nulls elided
assertFalse(baos.toString().contains("id"));
assertFalse(baos.toString().contains("createdAt"));
}
}
@dehora
Copy link
Author

dehora commented Nov 2, 2016

If the sub object is changed to use ignorables (see // mark below), the bare object mapper will pass

package org.zalando.fahrschein.domain;

import com.fasterxml.jackson.annotation.JsonCreator;

import com.fasterxml.jackson.annotation.JsonInclude;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
import java.time.OffsetDateTime;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

@Immutable
public class Subscription {
    @Nullable
    @JsonInclude(JsonInclude.Include.NON_NULL) // mark
    private final String id;
    private final String owningApplication;
    private final Set<String> eventTypes;
    private final String consumerGroup;
    @Nullable
    @JsonInclude(JsonInclude.Include.NON_NULL)  // mark
    private final OffsetDateTime createdAt;

   ...
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment