forked from eugenp/tutorials
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Jackson Map Serialize/Deserialize (eugenp#1511)
* Solr w Apache SolrJ * Solr w Apache SolrJ * updated test names and moved add to @before method * create apache-solrj module, moved code from spring-data-solr * More examples for indexing,delete,and query for solrj * More examples for indexing,delete,and query for solrj * Jackson Map Serialize/Deserialize * Jackson Map Serialize/Deserialize
- Loading branch information
1 parent
e6836c0
commit 427077e
Showing
4 changed files
with
239 additions
and
0 deletions.
There are no files selected for viewing
80 changes: 80 additions & 0 deletions
80
jackson/src/main/java/com/baeldung/jackson/entities/MyPair.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
package com.baeldung.jackson.entities; | ||
|
||
import com.fasterxml.jackson.annotation.JsonValue; | ||
|
||
public class MyPair { | ||
|
||
private String first; | ||
private String second; | ||
|
||
public MyPair(String first, String second) { | ||
this.first = first; | ||
this.second = second; | ||
} | ||
|
||
public MyPair(String both) { | ||
String[] pairs = both.split("and"); | ||
this.first = pairs[0].trim(); | ||
this.second = pairs[1].trim(); | ||
} | ||
|
||
@Override | ||
@JsonValue | ||
public String toString() { | ||
return first + " and " + second; | ||
} | ||
|
||
@Override | ||
public int hashCode() { | ||
final int prime = 31; | ||
int result = 1; | ||
result = prime * result + ((first == null) ? 0 : first.hashCode()); | ||
result = prime * result + ((second == null) ? 0 : second.hashCode()); | ||
return result; | ||
} | ||
|
||
@Override | ||
public boolean equals(Object obj) { | ||
if (this == obj) { | ||
return true; | ||
} | ||
if (obj == null) { | ||
return false; | ||
} | ||
if (!(obj instanceof MyPair)) { | ||
return false; | ||
} | ||
MyPair other = (MyPair) obj; | ||
if (first == null) { | ||
if (other.first != null) { | ||
return false; | ||
} | ||
} else if (!first.equals(other.first)) { | ||
return false; | ||
} | ||
if (second == null) { | ||
if (other.second != null) { | ||
return false; | ||
} | ||
} else if (!second.equals(other.second)) { | ||
return false; | ||
} | ||
return true; | ||
} | ||
|
||
public String getFirst() { | ||
return first; | ||
} | ||
|
||
public void setFirst(String first) { | ||
this.first = first; | ||
} | ||
|
||
public String getSecond() { | ||
return second; | ||
} | ||
|
||
public void setSecond(String second) { | ||
this.second = second; | ||
} | ||
} |
25 changes: 25 additions & 0 deletions
25
jackson/src/main/java/com/baeldung/jackson/serialization/MyPairSerializer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
package com.baeldung.jackson.serialization; | ||
|
||
import java.io.IOException; | ||
import java.io.StringWriter; | ||
|
||
import com.baeldung.jackson.entities.MyPair; | ||
import com.fasterxml.jackson.core.JsonGenerator; | ||
import com.fasterxml.jackson.core.JsonProcessingException; | ||
import com.fasterxml.jackson.databind.JsonSerializer; | ||
import com.fasterxml.jackson.databind.ObjectMapper; | ||
import com.fasterxml.jackson.databind.SerializerProvider; | ||
|
||
public class MyPairSerializer extends JsonSerializer<MyPair> { | ||
|
||
private final ObjectMapper mapper = new ObjectMapper(); | ||
|
||
@Override | ||
public void serialize(MyPair value, JsonGenerator gen, | ||
SerializerProvider serializers) throws IOException, | ||
JsonProcessingException { | ||
StringWriter writer = new StringWriter(); | ||
mapper.writeValue(writer, value); | ||
gen.writeFieldName(writer.toString()); | ||
} | ||
} |
63 changes: 63 additions & 0 deletions
63
jackson/src/test/java/com/baeldung/jackson/deserialization/JacksonMapDeserializeTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
package com.baeldung.jackson.deserialization; | ||
|
||
import java.io.IOException; | ||
import java.util.HashMap; | ||
import java.util.Map; | ||
|
||
import org.junit.Assert; | ||
import org.junit.Test; | ||
|
||
import com.baeldung.jackson.entities.MyPair; | ||
import com.fasterxml.jackson.core.JsonParseException; | ||
import com.fasterxml.jackson.core.type.TypeReference; | ||
import com.fasterxml.jackson.databind.JsonMappingException; | ||
import com.fasterxml.jackson.databind.ObjectMapper; | ||
|
||
public class JacksonMapDeserializeTest { | ||
|
||
private Map<MyPair, String> map; | ||
private Map<MyPair, MyPair> cmap; | ||
|
||
@Test | ||
public void whenSimpleMapDeserialize_thenCorrect() | ||
throws JsonParseException, JsonMappingException, IOException { | ||
|
||
final String jsonInput = "{\"key\": \"value\"}"; | ||
final ObjectMapper mapper = new ObjectMapper(); | ||
TypeReference<HashMap<String, String>> typeRef = new TypeReference<HashMap<String, String>>() { | ||
}; | ||
|
||
final Map<String, String> map = mapper.readValue(jsonInput, typeRef); | ||
|
||
Assert.assertEquals("value", map.get("key")); | ||
} | ||
|
||
@Test | ||
public void whenObjectStringMapDeserialize_thenCorrect() | ||
throws JsonParseException, JsonMappingException, IOException { | ||
|
||
final String jsonInput = "{\"Abbott and Costello\" : \"Comedy\"}"; | ||
final ObjectMapper mapper = new ObjectMapper(); | ||
|
||
TypeReference<HashMap<MyPair, String>> typeRef = new TypeReference<HashMap<MyPair, String>>() { | ||
}; | ||
map = mapper.readValue(jsonInput, typeRef); | ||
|
||
Assert.assertEquals("Comedy", map.get(new MyPair("Abbott", "Costello"))); | ||
} | ||
|
||
@Test | ||
public void whenObjectObjectMapDeserialize_thenCorrect() | ||
throws JsonParseException, JsonMappingException, IOException { | ||
|
||
final String jsonInput = "{\"Abbott and Costello\" : \"Comedy and 1940s\"}"; | ||
final ObjectMapper mapper = new ObjectMapper(); | ||
TypeReference<HashMap<MyPair, MyPair>> typeRef = new TypeReference<HashMap<MyPair, MyPair>>() { | ||
}; | ||
|
||
cmap = mapper.readValue(jsonInput, typeRef); | ||
|
||
Assert.assertEquals(new MyPair("Comedy", "1940s"), | ||
cmap.get(new MyPair("Abbott", "Costello"))); | ||
} | ||
} |
71 changes: 71 additions & 0 deletions
71
jackson/src/test/java/com/baeldung/jackson/serialization/JacksonMapSerializeTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
package com.baeldung.jackson.serialization; | ||
|
||
import java.util.HashMap; | ||
import java.util.Map; | ||
|
||
import org.junit.Assert; | ||
import org.junit.Test; | ||
|
||
import com.baeldung.jackson.entities.MyPair; | ||
import com.fasterxml.jackson.core.JsonProcessingException; | ||
import com.fasterxml.jackson.databind.ObjectMapper; | ||
import com.fasterxml.jackson.databind.annotation.JsonSerialize; | ||
import com.fasterxml.jackson.databind.ser.std.MapSerializer; | ||
|
||
public class JacksonMapSerializeTest { | ||
|
||
@JsonSerialize(keyUsing = MyPairSerializer.class) | ||
private Map<MyPair, String> map; | ||
|
||
@JsonSerialize(keyUsing = MapSerializer.class) | ||
private Map<MyPair, MyPair> cmap; | ||
|
||
@JsonSerialize(keyUsing = MyPairSerializer.class) | ||
private MyPair mapKey; | ||
|
||
@JsonSerialize(keyUsing = MyPairSerializer.class) | ||
private MyPair mapValue; | ||
|
||
@Test | ||
public void whenSimpleMapSerialize_thenCorrect() | ||
throws JsonProcessingException { | ||
|
||
Map<String, String> map = new HashMap<String, String>(); | ||
map.put("key", "value"); | ||
|
||
final ObjectMapper mapper = new ObjectMapper(); | ||
final String jsonResult = mapper.writeValueAsString(map); | ||
|
||
Assert.assertEquals("{\"key\":\"value\"}", jsonResult); | ||
} | ||
|
||
@Test | ||
public void whenCustomObjectStringMapSerialize_thenCorrect() | ||
throws JsonProcessingException { | ||
|
||
map = new HashMap<MyPair, String>(); | ||
MyPair key = new MyPair("Abbott", "Costello"); | ||
map.put(key, "Comedy"); | ||
|
||
final ObjectMapper mapper = new ObjectMapper(); | ||
final String jsonResult = mapper.writeValueAsString(map); | ||
|
||
Assert.assertEquals("{\"Abbott and Costello\":\"Comedy\"}", jsonResult); | ||
} | ||
|
||
@Test | ||
public void whenCustomObjectObjectMapSerialize_thenCorrect() | ||
throws JsonProcessingException { | ||
|
||
cmap = new HashMap<MyPair, MyPair>(); | ||
mapKey = new MyPair("Abbott", "Costello"); | ||
mapValue = new MyPair("Comedy", "1940's"); | ||
cmap.put(mapKey, mapValue); | ||
|
||
final ObjectMapper mapper = new ObjectMapper(); | ||
final String jsonResult = mapper.writeValueAsString(cmap); | ||
|
||
Assert.assertEquals("{\"Abbott and Costello\":\"Comedy and 1940's\"}", | ||
jsonResult); | ||
} | ||
} |