Infer reflection hints for Jackson annotation class attributes

Closes gh-29646
Closes gh-29386
This commit is contained in:
Sébastien Deleuze
2023-01-23 13:21:34 +01:00
parent 1e47f31210
commit e6397c8a38
3 changed files with 56 additions and 11 deletions

View File

@@ -21,6 +21,10 @@ import java.util.List;
import java.util.Set;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import org.junit.jupiter.api.Test;
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates;
@@ -252,6 +256,15 @@ public class BindingReflectionHintsRegistrarTests {
.accepts(this.hints);
}
@Test
void registerTypeForJacksonCustomStrategy() {
bindingRegistrar.registerReflectionHints(this.hints.reflection(), SampleRecordWithJacksonCustomStrategy.class);
assertThat(RuntimeHintsPredicates.reflection().onType(PropertyNamingStrategies.UpperSnakeCaseStrategy.class).withMemberCategory(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS))
.accepts(this.hints);
assertThat(RuntimeHintsPredicates.reflection().onType(SampleRecordWithJacksonCustomStrategy.Builder.class).withMemberCategory(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS))
.accepts(this.hints);
}
static class SampleEmptyClass {
}
@@ -356,4 +369,28 @@ public class BindingReflectionHintsRegistrarTests {
static class SampleClassWithInheritedJsonProperty extends SampleClassWithJsonProperty {}
@JsonNaming(PropertyNamingStrategies.UpperSnakeCaseStrategy.class)
@JsonDeserialize(builder = SampleRecordWithJacksonCustomStrategy.Builder.class)
record SampleRecordWithJacksonCustomStrategy(String name) {
@JsonPOJOBuilder(withPrefix = "")
public static class Builder {
private String name;
public static Builder newInstance() {
return new Builder();
}
public Builder id(String name) {
this.name = name;
return this;
}
public SampleRecordWithJacksonCustomStrategy build() {
return new SampleRecordWithJacksonCustomStrategy(name);
}
}
}
}