Gabriel39 commented on a change in pull request #10869:
URL: https://github.com/apache/druid/pull/10869#discussion_r573465146
##########
File path:
core/src/main/java/org/apache/druid/guice/GuiceAnnotationIntrospector.java
##########
@@ -101,13 +103,28 @@ public Object findInjectableValueId(AnnotatedMember m)
// delegate creators. I'm not 100% sure why it's not called, but guess
it's because the argument
// is some Java type that Jackson already knows how to deserialize. Since
there is only one argument,
// Jackson perhaps is able to just deserialize it without introspection.
+
if (ac instanceof AnnotatedParameter) {
final AnnotatedParameter ap = (AnnotatedParameter) ac;
if (ap.hasAnnotation(JsonProperty.class)) {
return JsonIgnoreProperties.Value.empty();
}
}
- return JsonIgnoreProperties.Value.forIgnoredProperties("");
+ // A map can have empty string keys e.g.
https://github.com/apache/druid/issues/10859. By returning empty ignored
+ // list for map, we can allow for empty string keys in a map. A nested
class within map
+ // can still be annotated with JacksonInject and still be
non-deserializable from user input
+ // Refer to {@link
com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.createMapDeserializer}
for details
+ // on how the ignored list is passed to map deserializer
+ if (ac instanceof AnnotatedClass) {
Review comment:
if we have a Map type field inside a class (just like Map is a field
inside org.apache.druid.query.extraction.MapLookupExtractor), the bug reported
by #10859 means when we deserialize
org.apache.druid.query.extraction.MapLookupExtractor, the empty string key in
Map will be ignored. So in this case, AnnotatedClass here is MapLookupExtractor
instead Map.
To verify it, I remove this block and it works well.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]