| package com.fasterxml.jackson.databind.convert; |
| |
| import java.io.IOException; |
| import java.util.*; |
| |
| import com.fasterxml.jackson.core.JsonGenerator; |
| |
| import com.fasterxml.jackson.databind.JsonSerializer; |
| import com.fasterxml.jackson.databind.SerializerProvider; |
| import com.fasterxml.jackson.databind.annotation.JsonSerialize; |
| import com.fasterxml.jackson.databind.util.StdConverter; |
| |
| public class TestConvertingSerializer |
| extends com.fasterxml.jackson.databind.BaseMapTest |
| { |
| @JsonSerialize(converter=ConvertingBeanConverter.class) |
| static class ConvertingBean |
| { |
| public int x, y; |
| |
| public ConvertingBean(int v1, int v2) { |
| x = v1; |
| y = v2; |
| } |
| } |
| |
| static class Point |
| { |
| public int x, y; |
| |
| public Point(int v1, int v2) { |
| x = v1; |
| y = v2; |
| } |
| } |
| |
| static class ConvertingBeanContainer |
| { |
| public List<ConvertingBean> values; |
| |
| public ConvertingBeanContainer(ConvertingBean... beans) { |
| values = Arrays.asList(beans); |
| } |
| } |
| |
| static class ConvertingBeanConverter extends StdConverter<ConvertingBean, int[]> |
| { |
| @Override |
| public int[] convert(ConvertingBean value) { |
| return new int[] { value.x, value.y }; |
| } |
| } |
| |
| static class PointConverter extends StdConverter<Point, int[]> |
| { |
| @Override public int[] convert(Point value) { |
| return new int[] { value.x, value.y }; |
| } |
| } |
| |
| static class PointWrapper { |
| @JsonSerialize(converter=PointConverter.class) |
| public Point value; |
| |
| public PointWrapper(int x, int y) { |
| value = new Point(x, y); |
| } |
| } |
| |
| static class PointListWrapperArray { |
| @JsonSerialize(contentConverter=PointConverter.class) |
| public Point[] values; |
| |
| public PointListWrapperArray(int x, int y) { |
| values = new Point[] { new Point(x, y), new Point(y, x) }; |
| } |
| } |
| |
| static class PointListWrapperList { |
| @JsonSerialize(contentConverter=PointConverter.class) |
| public List<Point> values; |
| |
| public PointListWrapperList(int x, int y) { |
| values = Arrays.asList(new Point[] { new Point(x, y), new Point(y, x) }); |
| } |
| } |
| |
| static class PointListWrapperMap { |
| @JsonSerialize(contentConverter=PointConverter.class) |
| public Map<String,Point> values; |
| |
| public PointListWrapperMap(String key, int x, int y) { |
| values = new HashMap<String,Point>(); |
| values.put(key, new Point(x, y)); |
| } |
| } |
| |
| // [databind#357] |
| static class Value { } |
| |
| static class ListWrapper { |
| @JsonSerialize(contentConverter = ValueToStringListConverter.class) |
| public List<Value> list = Arrays.asList(new Value()); |
| } |
| |
| static class ValueToStringListConverter extends StdConverter<Value, List<String>> { |
| @Override |
| public List<String> convert(Value value) { |
| return Arrays.asList("Hello world!"); |
| } |
| } |
| |
| // [databind#359] |
| static class Bean359 { |
| @JsonSerialize(as = List.class, contentAs = Source.class) |
| public List<Source> stuff = Arrays.asList(new Source()); |
| } |
| |
| @JsonSerialize(using = TargetSerializer.class) |
| static class Target { |
| public String unexpected = "Bye."; |
| } |
| |
| @JsonSerialize(converter = SourceToTargetConverter.class) |
| static class Source { } |
| |
| static class SourceToTargetConverter extends StdConverter<Source, Target> { |
| @Override |
| public Target convert(Source value) { |
| return new Target(); |
| } |
| } |
| |
| static class TargetSerializer extends JsonSerializer<Target> |
| { |
| @Override |
| public void serialize(Target a, JsonGenerator jsonGenerator, SerializerProvider provider) throws IOException { |
| jsonGenerator.writeString("Target"); |
| } |
| } |
| |
| // [databind#731] |
| public static class DummyBean { |
| public final int a, b; |
| public DummyBean(int v1, int v2) { |
| a = v1 * 2; |
| b = v2 * 2; |
| } |
| } |
| |
| @JsonSerialize(converter = UntypedConvertingBeanConverter.class) |
| static class ConvertingBeanWithUntypedConverter { |
| public int x, y; |
| public ConvertingBeanWithUntypedConverter(int v1, int v2) { |
| x = v1; |
| y = v2; |
| } |
| } |
| |
| static class UntypedConvertingBeanConverter extends StdConverter<ConvertingBeanWithUntypedConverter, Object> |
| { |
| @Override |
| public Object convert(ConvertingBeanWithUntypedConverter cb) { |
| return new DummyBean(cb.x, cb.y); |
| } |
| } |
| |
| /* |
| /********************************************************** |
| /* Test methods |
| /********************************************************** |
| */ |
| |
| public void testClassAnnotationSimple() throws Exception |
| { |
| String json = objectWriter().writeValueAsString(new ConvertingBean(1, 2)); |
| assertEquals("[1,2]", json); |
| } |
| |
| public void testClassAnnotationForLists() throws Exception |
| { |
| String json = objectWriter().writeValueAsString(new ConvertingBeanContainer( |
| new ConvertingBean(1, 2), new ConvertingBean(3, 4))); |
| assertEquals("{\"values\":[[1,2],[3,4]]}", json); |
| } |
| |
| public void testPropertyAnnotationSimple() throws Exception |
| { |
| String json = objectWriter().writeValueAsString(new PointWrapper(3, 4)); |
| assertEquals("{\"value\":[3,4]}", json); |
| } |
| |
| public void testPropertyAnnotationForArrays() throws Exception { |
| String json = objectWriter().writeValueAsString(new PointListWrapperArray(4, 5)); |
| assertEquals("{\"values\":[[4,5],[5,4]]}", json); |
| } |
| |
| public void testPropertyAnnotationForLists() throws Exception { |
| String json = objectWriter().writeValueAsString(new PointListWrapperList(7, 8)); |
| assertEquals("{\"values\":[[7,8],[8,7]]}", json); |
| } |
| |
| public void testPropertyAnnotationForMaps() throws Exception { |
| String json = objectWriter().writeValueAsString(new PointListWrapperMap("a", 1, 2)); |
| assertEquals("{\"values\":{\"a\":[1,2]}}", json); |
| } |
| |
| // [databind#357] |
| public void testConverterForList357() throws Exception { |
| String json = objectWriter().writeValueAsString(new ListWrapper()); |
| assertEquals("{\"list\":[[\"Hello world!\"]]}", json); |
| } |
| |
| // [databind#359] |
| public void testIssue359() throws Exception { |
| String json = objectWriter().writeValueAsString(new Bean359()); |
| assertEquals("{\"stuff\":[\"Target\"]}", json); |
| } |
| |
| // [databind#731]: Problems converting from java.lang.Object ("unknown") |
| public void testIssue731() throws Exception |
| { |
| String json = objectWriter().writeValueAsString(new ConvertingBeanWithUntypedConverter(1, 2)); |
| // must be {"a":2,"b":4} |
| assertEquals("{\"a\":2,\"b\":4}", json); |
| } |
| } |