FasterXML / jackson-modules-java8

Set of support modules for Java 8 datatypes (Optionals, date/time) and features (parameter names)
Apache License 2.0
401 stars 117 forks source link

ParameterNamesModule causes BeanDescription to include factory parameter as a property #158

Closed nikita2206 closed 4 years ago

nikita2206 commented 4 years ago

If I have this data class:

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.

nikita2206 commented 4 years ago

wrong repo đŸ˜…