Skip to content

Commit

Permalink
Fixed #359 for 2.4
Browse files Browse the repository at this point in the history
  • Loading branch information
cowtowncoder committed Mar 18, 2014
1 parent 81017b9 commit 8d6fa48
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 83 deletions.
2 changes: 2 additions & 0 deletions release-notes/VERSION
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ Version: 2.4.0 (xx-xxx-2014)
#335: Allow use of `@JsonProperytOrder(alphabetic=true)` for Map properties
#353: Problems with polymorphic types, `JsonNode` (related to #88)
(reported by cemo@github)
#359: Converted object not using explicitly annotated serializer
(reported by fschopp@github)
#369: Incorrect comparison for renaming in `POJOPropertyBuilder`
#375: Add `readValue()`/`readPropertyValue()` methods in `DeserializationContext`
#381: Allow inlining/unwrapping of value from single-component JSON array
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,16 +148,21 @@ public JsonSerializer<Object> createSerializer(SerializerProvider prov,
}
// Slight detour: do we have a Converter to consider?
Converter<Object,Object> conv = beanDesc.findSerializationConverter();
if (conv == null) { // no, simple:
if (conv == null) { // no, simple
return (JsonSerializer<Object>) _createSerializer2(prov, type, beanDesc, staticTyping);
}
JavaType delegateType = conv.getOutputType(prov.getTypeFactory());

// One more twist, as per [Issue#288]; probably need to get new BeanDesc
if (!delegateType.hasRawClass(type.getRawClass())) {
beanDesc = config.introspect(delegateType);
// [#359]: explicitly check (again) for @JsonSerializer...
ser = findSerializerFromAnnotation(prov, beanDesc.getClassInfo());
}
if (ser == null) {
ser = _createSerializer2(prov, delegateType, beanDesc, true);
}
return new StdDelegatingSerializer(conv, delegateType,
_createSerializer2(prov, delegateType, beanDesc, true));
return new StdDelegatingSerializer(conv, delegateType, ser);
}

protected JsonSerializer<?> _createSerializer2(SerializerProvider prov,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
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;

Expand Down Expand Up @@ -90,6 +94,35 @@ public PointListWrapperMap(String key, int x, int y) {
}
}

// [Issue#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");
}
}

/*
/**********************************************************
/* Test methods
Expand Down Expand Up @@ -129,4 +162,10 @@ public void testPropertyAnnotationForMaps() throws Exception {
String json = objectWriter().writeValueAsString(new PointListWrapperMap("a", 1, 2));
assertEquals("{\"values\":{\"a\":[1,2]}}", json);
}

// [Issue#359]
public void testIssue359() throws Exception {
String json = objectWriter().writeValueAsString(new Bean359());
assertEquals("{\"stuff\":[\"Target\"]}", json);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.fasterxml.jackson.failing;

import java.util.*;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.util.StdConverter;

public class TestConvertingSerializer357
extends com.fasterxml.jackson.databind.BaseMapTest
{
// [Issue#357]
static class A { }

static class B {
@JsonSerialize(contentConverter = AToStringConverter.class)
public List<A> list = Arrays.asList(new A());
}

static class AToStringConverter extends StdConverter<A, List<String>> {
@Override
public List<String> convert(A value) {
return Arrays.asList("Hello world!");
}
}

/*
/**********************************************************
/* Test methods
/**********************************************************
*/

// [Issue#357]
public void testConverterForList357() throws Exception {
String json = objectWriter().writeValueAsString(new B());
assertEquals("{\"list\":[[\"Hello world!\"]]}", json);
}
}

This file was deleted.

0 comments on commit 8d6fa48

Please sign in to comment.