Jackson Map Serialize/Deserialize (#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
This commit is contained in:
parent
e6836c01c7
commit
427077ebfa
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
|
@ -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")));
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue