Skip to content

Commit

Permalink
custom serializer work
Browse files Browse the repository at this point in the history
  • Loading branch information
eugenp committed Jan 11, 2014
1 parent c905b21 commit a47c533
Show file tree
Hide file tree
Showing 6 changed files with 162 additions and 40 deletions.
6 changes: 6 additions & 0 deletions jackson/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,12 @@
<version>4.0</version>
</dependency>

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>

<!-- web -->

<!-- marshalling -->
Expand Down
28 changes: 28 additions & 0 deletions jackson/src/test/java/org/baeldung/jackson/dtos/Item.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.baeldung.jackson.dtos;

public class Item {
public final int id;
public final String itemNr;
public final User createdBy;

public Item(final int id, final String itemNr, final User createdBy) {
this.id = id;
this.itemNr = itemNr;
this.createdBy = createdBy;
}

// API

public int getId() {
return id;
}

public String getItemNr() {
return itemNr;
}

public User getCreatedBy() {
return createdBy;
}

}
22 changes: 22 additions & 0 deletions jackson/src/test/java/org/baeldung/jackson/dtos/User.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package org.baeldung.jackson.dtos;

public class User {
public final int id;
public final String name;

public User(final int id, final String name) {
this.id = id;
this.name = name;
}

// API

public int getId() {
return id;
}

public String getName() {
return name;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package org.baeldung.jackson.test;

import static org.hamcrest.Matchers.containsString;
import static org.junit.Assert.assertThat;

import java.io.IOException;

import org.baeldung.jackson.dtos.withEnum.MyDtoWithEnum;
import org.baeldung.jackson.dtos.withEnum.MyDtoWithEnumCustom;
import org.baeldung.jackson.dtos.withEnum.TypeEnum;
import org.baeldung.jackson.dtos.withEnum.TypeEnumWithCustomSerializer;
import org.junit.Test;

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

public class JacksonSerializationEnumsUnitTest {

// tests - enums

@Test
public final void whenSerializingSimpleEnum_thenCorrect() throws JsonParseException, IOException {
final ObjectMapper mapper = new ObjectMapper();
final String dtoAsString = mapper.writeValueAsString(TypeEnum.TYPE1);

System.out.println(dtoAsString);
assertThat(dtoAsString, containsString("\"name\":\"Type A\""));
}

@Test
public final void whenSerializingEntityWithEnum_thenCorrect() throws JsonParseException, IOException {
final ObjectMapper mapper = new ObjectMapper();
final String dtoAsString = mapper.writeValueAsString(new MyDtoWithEnum("a", 1, true, TypeEnum.TYPE1));

System.out.println(dtoAsString);
assertThat(dtoAsString, containsString("\"name\":\"Type A\""));
}

@Test
public final void givenCustomSerializer_whenSerializingEntityWithEnum_thenCorrect() throws JsonParseException, IOException {
final ObjectMapper mapper = new ObjectMapper();
final String dtoAsString = mapper.writeValueAsString(new MyDtoWithEnumCustom("a", 1, true, TypeEnumWithCustomSerializer.TYPE1));

System.out.println(dtoAsString);
assertThat(dtoAsString, containsString("\"name\":\"Type A\""));
}

@Test
public final void whenSerializingArrayOfEnums_thenCorrect() throws JsonParseException, IOException {
final ObjectMapper mapper = new ObjectMapper();
final String json = mapper.writeValueAsString(new TypeEnum[] { TypeEnum.TYPE1, TypeEnum.TYPE2 });

System.out.println(json);
assertThat(json, containsString("\"name\":\"Type A\""));
}

}
Original file line number Diff line number Diff line change
@@ -1,28 +1,33 @@
package org.baeldung.jackson.test;

import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
import static org.apache.commons.lang3.RandomStringUtils.randomNumeric;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.notNullValue;
import static org.junit.Assert.assertThat;

import java.io.IOException;
import java.io.StringWriter;
import java.util.List;

import org.baeldung.jackson.dtos.Item;
import org.baeldung.jackson.dtos.MyDto;
import org.baeldung.jackson.dtos.MyDtoFieldNameChanged;
import org.baeldung.jackson.dtos.MyDtoNoAccessors;
import org.baeldung.jackson.dtos.MyDtoNoAccessorsAndFieldVisibility;
import org.baeldung.jackson.dtos.withEnum.MyDtoWithEnum;
import org.baeldung.jackson.dtos.withEnum.MyDtoWithEnumCustom;
import org.baeldung.jackson.dtos.withEnum.TypeEnum;
import org.baeldung.jackson.dtos.withEnum.TypeEnumWithCustomSerializer;
import org.baeldung.jackson.dtos.User;
import org.baeldung.jackson.try1.ItemSerializer;
import org.junit.Test;

import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.google.common.collect.Lists;

public class JacksonSerializationUnitTest {
Expand Down Expand Up @@ -82,54 +87,35 @@ public final void givenObjectHasNoAccessorsButHasVisibleFields_whenSerializing_t
assertThat(dtoAsString, containsString("booleanValue"));
}

// tests - enums

@Test
public final void whenSerializingSimpleEnum_thenCorrect() throws JsonParseException, IOException {
final ObjectMapper mapper = new ObjectMapper();
final String dtoAsString = mapper.writeValueAsString(TypeEnum.TYPE1);

System.out.println(dtoAsString);
assertThat(dtoAsString, containsString("\"name\":\"Type A\""));
}

@Test
public final void whenSerializingEntityWithEnum_thenCorrect() throws JsonParseException, IOException {
final ObjectMapper mapper = new ObjectMapper();
final String dtoAsString = mapper.writeValueAsString(new MyDtoWithEnum("a", 1, true, TypeEnum.TYPE1));

System.out.println(dtoAsString);
assertThat(dtoAsString, containsString("\"name\":\"Type A\""));
}
// tests - multiple entities to json

@Test
public final void givenCustomSerializer_whenSerializingEntityWithEnum_thenCorrect() throws JsonParseException, IOException {
final ObjectMapper mapper = new ObjectMapper();
final String dtoAsString = mapper.writeValueAsString(new MyDtoWithEnumCustom("a", 1, true, TypeEnumWithCustomSerializer.TYPE1));

System.out.println(dtoAsString);
assertThat(dtoAsString, containsString("\"name\":\"Type A\""));
}
public final void whenDtoIsSerialized_thenCorrect() throws JsonParseException, IOException {
final List<MyDto> listOfDtos = Lists.newArrayList(new MyDto("a", 1, true), new MyDto("bc", 3, false));

@Test
public final void whenSerializingArrayOfEnums_thenCorrect() throws JsonParseException, IOException {
final ObjectMapper mapper = new ObjectMapper();
final String json = mapper.writeValueAsString(new TypeEnum[] { TypeEnum.TYPE1, TypeEnum.TYPE2 });
final String dtosAsString = mapper.writeValueAsString(listOfDtos);

System.out.println(json);
assertThat(json, containsString("\"name\":\"Type A\""));
System.out.println(dtosAsString);
}

// tests - multiple entities to json
// tests - custom serializer

@Test
public final void whenDtoIsSerialized_thenCorrect() throws JsonParseException, IOException {
final List<MyDto> listOfDtos = Lists.newArrayList(new MyDto("a", 1, true), new MyDto("bc", 3, false));
public final void whenSerializingWithCustomSerializer_thenNoExceptions() throws JsonGenerationException, JsonMappingException, IOException {
final Item myItem = new Item(Integer.parseInt(randomNumeric(2)), randomAlphabetic(8), new User(Integer.parseInt(randomNumeric(2)), randomAlphabetic(8)));

final ObjectMapper mapper = new ObjectMapper();
final String dtosAsString = mapper.writeValueAsString(listOfDtos);

System.out.println(dtosAsString);
final SimpleModule simpleModule = new SimpleModule("SimpleModule", new Version(1, 0, 0, null));
simpleModule.addSerializer(Item.class, new ItemSerializer());
// simpleModule.addSerializer(User.class, new UserSerializer());
mapper.registerModule(simpleModule);

final StringWriter writer = new StringWriter();
mapper.writeValue(writer, myItem);
final String serialized = writer.toString();
System.out.println(serialized);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.baeldung.jackson.try1;

import java.io.IOException;

import org.baeldung.jackson.dtos.Item;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

public class ItemSerializer extends JsonSerializer<Item> {

@Override
public final void serialize(final Item value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeNumberField("id", value.id);
jgen.writeStringField("itemNr", value.itemNr);
jgen.writeNumberField("createdBy", value.createdBy.id);
jgen.writeEndObject();
}

}

0 comments on commit a47c533

Please sign in to comment.