Skip to content

Dual nested generic Map deserialization exception #452

@zzl221000

Description

@zzl221000

avaje-jsonb version 3.8

import io.avaje.jsonb.Json;
import io.avaje.jsonb.Jsonb;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.text.MessageFormat;
import java.util.Map;

public class TestNestedGeneric {
    @Json
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public  static class TestMapMap {
        private Map<String, Map<String, Entity>> dims;

        @Json
        @Data
        @AllArgsConstructor
        @NoArgsConstructor
        public static class Entity {
            private String name;
            private String value;
        }

    }
    public static void main(String[] args) {
        var res = new TestMapMap(Map.of("test", Map.of("123", new TestMapMap.Entity("name", "value"))));
        var jsonb = Jsonb.builder().build();
        var p = jsonb.type(TestMapMap.class).toJson(res);
        System.out.println(p);
        jsonb.type(TestMapMap.class).fromJson(p).getDims().forEach((k,v)->v.forEach((k2,v2)-> System.out.println(MessageFormat.format("key:{0}, k {1},value:{2}", k,k2, v2))));
    }
}

Reuslt

Serializer

Success

Deserializer

Failed

{"dims":{"test":{"123":{"name":"name","value":"value"}}}}
Exception in thread "main" java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class com.winhc.bigdata.flink.jobs.slideoutput.dynamic.TestNestedGeneric$TestMapMap$Entity (java.util.LinkedHashMap is in module java.base of loader 'bootstrap'; com.winhc.bigdata.flink.jobs.slideoutput.dynamic.TestNestedGeneric$TestMapMap$Entity is in unnamed module of loader 'app')
	at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)
	at com.winhc.bigdata.flink.jobs.slideoutput.dynamic.TestNestedGeneric.lambda$main$1(TestNestedGeneric.java:35)
	at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)
	at com.winhc.bigdata.flink.jobs.slideoutput.dynamic.TestNestedGeneric.main(TestNestedGeneric.java:35)

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions