这是一个工作示例(我使用最新的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
。这是一个错误或预期的行为?任何解决方法?