Skip to content

Commit

Permalink
Jackson Map Serialize/Deserialize (eugenp#1511)
Browse files Browse the repository at this point in the history
* 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
nbosecker authored and KevinGilmore committed Mar 27, 2017
1 parent e6836c0 commit 427077e
Show file tree
Hide file tree
Showing 4 changed files with 239 additions and 0 deletions.
80 changes: 80 additions & 0 deletions jackson/src/main/java/com/baeldung/jackson/entities/MyPair.java
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;
}
}
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());
}
}
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")));
}
}
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);
}
}

0 comments on commit 427077e

Please sign in to comment.