Sure, I've created it as 
https://github.com/FasterXML/jackson-databind/issues/3209

On Tuesday, July 13, 2021 at 6:55:04 AM UTC+3 [email protected] wrote:

> If I understand the case correctly, it seems like this should work.
> But since it doesn't it would make sense to file an issue and I or someone 
> else could try to figure out why alias does not work.
>
> -+ Tatu +-
>
> On Mon, Jul 12, 2021 at 8:44 AM Mantas Gridinas <[email protected]> wrote:
>
>> Yo!
>>
>> I'm trying to migrate a makeshift polymorphic custom deserializer (which 
>> i spawned because I hadn't read the docs). The deserializer originally 
>> worked like the following annotation combo as per Polymorphic 
>> Deserialization usage
>>
>> public class Container {
>>     private String id;
>>     @JsonTypeInfo(use = Id.NAME, include = As.EXTERNAL_PROPERTY, property 
>> = "id")
>>     @JsonSubTypes({
>>             @Type(name = "FOO", value = Foo.class),
>>             @Type(name = "NAR", value = Nar.class)
>>     })
>>     private Object target;
>> }
>>
>> Getters and setters omitted for brevity.
>>
>> Basically original implementation could set the target field value as 
>> particular type depending on id field. But in addition to that, it could 
>> determine which field to read from, since the input source (sadly) only has 
>> one constant field (id) and target field's name would change depending on 
>> id field. If I was not using typeinfo and subtypes annotation combo, the 
>> annotation for aliases would be
>>
>> @JsonAlias({"fooValue", "narValue"})
>>
>> On their own, the two features work fine, but when you would try to use 
>> the two together, polymorphic deserializer is incapable of determining the 
>> source value field via aliases. Is there any way to make polymorphism work 
>> with field aliases?
>>
>> Below is the minimum working snippet to replicate my issue
>>
>> import com.fasterxml.jackson.annotation.JsonAlias;
>> import com.fasterxml.jackson.annotation.JsonSubTypes;
>> import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
>> import com.fasterxml.jackson.annotation.JsonTypeInfo;
>> import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
>> import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
>> import com.fasterxml.jackson.core.JsonProcessingException;
>> import com.fasterxml.jackson.databind.ObjectMapper;
>>
>> public class Main {
>>
>>     public static void main(String[] args) throws JsonProcessingException 
>> {
>>         String json = "{ \"id\": \"NAR\", \"narValue\": {}}";
>>         ObjectMapper mapper = new ObjectMapper();
>>         Container container = mapper.readValue(json, Container.class);
>>         System.out.println(container.getTarget()); // expected value is 
>> Nar@[hashcode]
>>     }
>>
>>     public static class Nar {
>>
>>         private String dar;
>>         private String zar;
>>
>>         public String getDar() {
>>             return dar;
>>         }
>>
>>         public void setDar(String dar) {
>>             this.dar = dar;
>>         }
>>
>>         public String getZar() {
>>             return zar;
>>         }
>>
>>         public void setZar(String zar) {
>>             this.zar = zar;
>>         }
>>     }
>>
>>     public static class Foo {
>>         private String bar;
>>         private String zar;
>>
>>         public String getBar() {
>>             return bar;
>>         }
>>
>>         public void setBar(String bar) {
>>             this.bar = bar;
>>         }
>>
>>         public String getZar() {
>>             return zar;
>>         }
>>
>>         public void setZar(String zar) {
>>             this.zar = zar;
>>         }
>>     }
>>
>>     public static class Container {
>>
>>         private String id;
>>         @JsonTypeInfo(use = Id.NAME, include = As.EXTERNAL_PROPERTY, 
>> property = "id")
>>         @JsonSubTypes({
>>                 @Type(name = "FOO", value = Foo.class),
>>                 @Type(name = "NAR", value = Nar.class)
>>         })
>>         @JsonAlias({
>>                 "fooValue",
>>                 "narValue"
>>         })
>>         private Object target;
>>
>>         public String getId() {
>>             return id;
>>         }
>>
>>         public void setId(String id) {
>>             this.id = id;
>>         }
>>
>>         public Object getTarget() {
>>             return target;
>>         }
>>
>>         public void setTarget(Object target) {
>>             this.target = target;
>>         }
>>     }
>> }
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "jackson-user" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/jackson-user/2e28b484-71ad-41af-be92-ffc12ed30ae2n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/jackson-user/2e28b484-71ad-41af-be92-ffc12ed30ae2n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"jackson-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jackson-user/ca352417-ac11-44f8-9296-dd5ce637c376n%40googlegroups.com.

Reply via email to