当属性的类使用@JsonSerialize的转换器时,为什么会忽略@JsonUnwrapped?

时间:2018-05-04 15:41:12

标签: java jackson jackson-databind

这是一个工作示例(我使用最新的2.9.5杰克逊版本。)

public class RootClass {
    @JsonUnwrapped
    public NestedClass nested = new NestedClass();

    public static void main(String[] args) throws JsonProcessingException {
        RootClass obj = new RootClass();
        System.out.println(new ObjectMapper().writeValueAsString(obj));
    }
}

@JsonSerialize(converter = NestedClassConverter.class)
class NestedClass {
    public String foo = "fooVal";
    public String bar = "barVal";
}

class NestedClassWrapper {
    private NestedClass wrapped;

    public NestedClassWrapper(NestedClass wrapped) {
        this.wrapped = wrapped;
    }

    public String getFoo() {
        return wrapped.foo;
    }

    public String getBar() {
        return wrapped.bar;
    }
}

class NestedClassConverter extends StdConverter<NestedClass, NestedClassWrapper> {

    @Override
    public NestedClassWrapper convert(NestedClass value) {
        return new NestedClassWrapper(value);
    }
}

如果我从@JsonSerialize移除NestedClass,它会按预期工作并生成{"foo":"fooVal","bar":"barVal"}。 但是如果使用转换器,则嵌套字段不会被打开&#34;展开&#34;我得到:{"nested":{"bar":"barVal","foo":"fooVal"}}

如何使用converter

获得预期的展开结果?

更新: 在调试器(UnwrappingBeanPropertyWriter.class)中,我可以看到,在使用转换器的情况下,_findAndAddDynamic会返回StdDelegationSerializer而不是UnwrappingBeanSerializer。这是一个错误或预期的行为?任何解决方法?

0 个答案:

没有答案