BAEL-245: Add Enum serialization example (#970)
* Add NDC and JBoss Logging to the demo application * NDC for Log4j, Log4j2 and JBoss Logging * Simplify NDC example by making it a single operation instead of two * Make NDC example as RestController, Use JBoss Logging only as a logging bridge * Fix merge conflicts in pull request - log-mdc pom.xml updated * BAEL-445 Update to Spring security SpEL example * BAEL-445: Change tabs to spaces in the updated code * BAEL-245: Add Enum Serialization exmaple * BAEL-245: Remove the folder jackson/src/test/java/com/baeldung/jackson/dtos/withEnum as the example is not used anymore
This commit is contained in:
parent
e8a9b60862
commit
82fc8cf8fc
|
@ -0,0 +1,54 @@
|
|||
package com.baeldung.jackson.enums;
|
||||
|
||||
import com.baeldung.jackson.serialization.DistanceSerializer;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
|
||||
/**
|
||||
* Use @JsonFormat to handle representation of Enum as JSON (available since Jackson 2.1.2)
|
||||
* Use @JsonSerialize to configure a custom Jackson serializer
|
||||
*/
|
||||
// @JsonFormat(shape = JsonFormat.Shape.OBJECT)
|
||||
@JsonSerialize(using = DistanceSerializer.class)
|
||||
public enum Distance {
|
||||
KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001);
|
||||
|
||||
private String unit;
|
||||
private final double meters;
|
||||
|
||||
private Distance(String unit, double meters) {
|
||||
this.unit = unit;
|
||||
this.meters = meters;
|
||||
}
|
||||
|
||||
/**
|
||||
* Use @JsonValue to control marshalling output for an enum
|
||||
*/
|
||||
// @JsonValue
|
||||
public double getMeters() {
|
||||
return meters;
|
||||
}
|
||||
|
||||
public String getUnit() {
|
||||
return unit;
|
||||
}
|
||||
|
||||
public void setUnit(String unit) {
|
||||
this.unit = unit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Usage example: Distance.MILE.convertFromMeters(1205.5);
|
||||
*/
|
||||
public double convertFromMeters(double distanceInMeters) {
|
||||
return distanceInMeters / meters;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Usage example: Distance.MILE.convertToMeters(0.5);
|
||||
*/
|
||||
public double convertToMeters(double distanceInMeters) {
|
||||
return distanceInMeters * meters;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
package com.baeldung.jackson.serialization;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import com.baeldung.jackson.enums.Distance;
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.SerializerProvider;
|
||||
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
|
||||
|
||||
public class DistanceSerializer extends StdSerializer<Distance> {
|
||||
|
||||
private static final long serialVersionUID = 1376504304439963619L;
|
||||
|
||||
public DistanceSerializer() {
|
||||
super(Distance.class);
|
||||
}
|
||||
|
||||
public DistanceSerializer(Class<Distance> t) {
|
||||
super(t);
|
||||
}
|
||||
|
||||
public void serialize(Distance distance, JsonGenerator generator, SerializerProvider provider) throws IOException, JsonProcessingException {
|
||||
generator.writeStartObject();
|
||||
generator.writeFieldName("name");
|
||||
generator.writeNumber(distance.name());
|
||||
generator.writeFieldName("unit");
|
||||
generator.writeString(distance.getUnit());
|
||||
generator.writeFieldName("meters");
|
||||
generator.writeNumber(distance.getMeters());
|
||||
generator.writeEndObject();
|
||||
}
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
package com.baeldung.jackson.dtos.withEnum;
|
||||
|
||||
public class MyDtoWithEnum {
|
||||
|
||||
private String stringValue;
|
||||
private int intValue;
|
||||
private boolean booleanValue;
|
||||
private TypeEnum type;
|
||||
|
||||
public MyDtoWithEnum() {
|
||||
super();
|
||||
}
|
||||
|
||||
public MyDtoWithEnum(final String stringValue, final int intValue, final boolean booleanValue, final TypeEnum type) {
|
||||
super();
|
||||
|
||||
this.stringValue = stringValue;
|
||||
this.intValue = intValue;
|
||||
this.booleanValue = booleanValue;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
// API
|
||||
|
||||
public String getStringValue() {
|
||||
return stringValue;
|
||||
}
|
||||
|
||||
public void setStringValue(final String stringValue) {
|
||||
this.stringValue = stringValue;
|
||||
}
|
||||
|
||||
public int getIntValue() {
|
||||
return intValue;
|
||||
}
|
||||
|
||||
public void setIntValue(final int intValue) {
|
||||
this.intValue = intValue;
|
||||
}
|
||||
|
||||
public boolean isBooleanValue() {
|
||||
return booleanValue;
|
||||
}
|
||||
|
||||
public void setBooleanValue(final boolean booleanValue) {
|
||||
this.booleanValue = booleanValue;
|
||||
}
|
||||
|
||||
public TypeEnum getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(final TypeEnum type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
package com.baeldung.jackson.dtos.withEnum;
|
||||
|
||||
public class MyDtoWithEnumCustom {
|
||||
|
||||
private String stringValue;
|
||||
private int intValue;
|
||||
private boolean booleanValue;
|
||||
private TypeEnumWithCustomSerializer type;
|
||||
|
||||
public MyDtoWithEnumCustom() {
|
||||
super();
|
||||
}
|
||||
|
||||
public MyDtoWithEnumCustom(final String stringValue, final int intValue, final boolean booleanValue, final TypeEnumWithCustomSerializer type) {
|
||||
super();
|
||||
|
||||
this.stringValue = stringValue;
|
||||
this.intValue = intValue;
|
||||
this.booleanValue = booleanValue;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
// API
|
||||
|
||||
public String getStringValue() {
|
||||
return stringValue;
|
||||
}
|
||||
|
||||
public void setStringValue(final String stringValue) {
|
||||
this.stringValue = stringValue;
|
||||
}
|
||||
|
||||
public int getIntValue() {
|
||||
return intValue;
|
||||
}
|
||||
|
||||
public void setIntValue(final int intValue) {
|
||||
this.intValue = intValue;
|
||||
}
|
||||
|
||||
public boolean isBooleanValue() {
|
||||
return booleanValue;
|
||||
}
|
||||
|
||||
public void setBooleanValue(final boolean booleanValue) {
|
||||
this.booleanValue = booleanValue;
|
||||
}
|
||||
|
||||
public TypeEnumWithCustomSerializer getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(final TypeEnumWithCustomSerializer type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
package com.baeldung.jackson.dtos.withEnum;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
|
||||
public enum TypeEnum {
|
||||
TYPE1(1, "Type A"), TYPE2(2, "Type 2");
|
||||
|
||||
private Integer id;
|
||||
private String name;
|
||||
|
||||
private TypeEnum(final Integer id, final String name) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
// API
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(final Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(final String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
package com.baeldung.jackson.dtos.withEnum;
|
||||
|
||||
public enum TypeEnumSimple {
|
||||
TYPE1(1, "Type A"), TYPE2(2, "Type 2");
|
||||
|
||||
private Integer id;
|
||||
private String name;
|
||||
|
||||
private TypeEnumSimple(final Integer id, final String name) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
// API
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(final Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(final String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
package com.baeldung.jackson.dtos.withEnum;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
|
||||
@JsonSerialize(using = TypeSerializer.class)
|
||||
public enum TypeEnumWithCustomSerializer {
|
||||
TYPE1(1, "Type A"), TYPE2(2, "Type 2");
|
||||
|
||||
private Integer id;
|
||||
private String name;
|
||||
|
||||
private TypeEnumWithCustomSerializer(final Integer id, final String name) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
// API
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(final Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(final String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
package com.baeldung.jackson.dtos.withEnum;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonValue;
|
||||
|
||||
public enum TypeEnumWithValue {
|
||||
TYPE1(1, "Type A"), TYPE2(2, "Type 2");
|
||||
|
||||
private Integer id;
|
||||
|
||||
private String name;
|
||||
|
||||
private TypeEnumWithValue(final Integer id, final String name) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
// API
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(final Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@JsonValue
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(final String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
package com.baeldung.jackson.dtos.withEnum;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.SerializerProvider;
|
||||
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
|
||||
|
||||
public class TypeSerializer extends StdSerializer<TypeEnumWithCustomSerializer> {
|
||||
|
||||
private static final long serialVersionUID = -7650668914169390772L;
|
||||
|
||||
public TypeSerializer() {
|
||||
this(null);
|
||||
}
|
||||
|
||||
public TypeSerializer(final Class<TypeEnumWithCustomSerializer> t) {
|
||||
super(t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void serialize(final TypeEnumWithCustomSerializer value, final JsonGenerator generator, final SerializerProvider provider) throws IOException, JsonProcessingException {
|
||||
generator.writeStartObject();
|
||||
generator.writeFieldName("id");
|
||||
generator.writeNumber(value.getId());
|
||||
generator.writeFieldName("name");
|
||||
generator.writeString(value.getName());
|
||||
generator.writeEndObject();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package com.baeldung.jackson.enums;
|
||||
|
||||
import static org.hamcrest.Matchers.containsString;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonParseException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
public class JacksonEnumSerializationTest {
|
||||
|
||||
@Test
|
||||
public final void givenEnum_whenSerializingJson_thenCorrectRepresentation() throws JsonParseException, IOException {
|
||||
final String dtoAsString = new ObjectMapper().writeValueAsString(Distance.MILE);
|
||||
|
||||
assertThat(dtoAsString, containsString("1609.34"));
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue