public class Data {
private final String foo;
private final Integer bar;
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
static Data fromBuilder(Builder builder) {
return new Data(builder.foo, builder.bar);
}
private Data(String foo, Integer bar) {
this.foo = foo;
this.bar = bar;
}
public String getFoo() {
return foo;
}
public Integer getBar() {
return bar;
}
public static class Builder {
private String foo;
private Integer bar;
@JsonProperty("foo")
public Builder foo(String foo) {
this.foo = foo;
return this;
}
@JsonProperty("bar")
public Builder bar(Integer bar) {
this.bar = bar;
return this;
}
public Data build() {
return Data.fromBuilder(this);
}
}
}
Then running objectMapper.getSerializationConfig().introspect(/* Data type */); will return a BeanDescription that includes builder as a property.
This happens because with ParameterNamesModule we are able to infer the name of the JsonCreator parameter here and when we are, we include this parameter in the properties.
I think here we should be checking if the creator factory is a delegating kind that takes a complex value as an input. If maintainers of this repo agree, I will file a PR with the fix.
If I have this data class:
Then running
objectMapper.getSerializationConfig().introspect(/* Data type */);
will return aBeanDescription
that includesbuilder
as a property.This happens because with
ParameterNamesModule
we are able to infer the name of theJsonCreator
parameter here and when we are, we include this parameter in the properties.I think here we should be checking if the creator factory is a delegating kind that takes a complex value as an input. If maintainers of this repo agree, I will file a PR with the fix.