Json字符串到带有动态键的Java对象

杜迪斯

我想向Java对象插入REST API响应。我的示例响应如下。

    {
        "key1": [
          {
            "name": "test1",
            "id": "id1",            
          }
        ],
        "key2": [
          {
            "name": "test2",
            "id": "id2",            
          },
          {
            "name": "test3",
            "id": "id3", 
          }
        ]
      }

为此,我创建了“ User”类来重复对象

@Data
public class User {
    private String name;
    private String id;    
}

API响应主体仅接受Class<T>,为此,我将其解析Map.class为该函数,因为我想向其中插入json响应数据,Map<String, List<User>>而不是java类对象。

public Mono<Map> getUserInfo(String number) {
        return apiAdaptor.getRequest(urlConfiguration.getUserApi(), Map.class, true
                , number);
    }


public <T> Mono<T> getRequest(String url, Class<T> responseClass, boolean isDds,
                                  String... urlArgs) {
        return Mono.just(this.accessToken)
                .flatMap(token -> this.webClient.get()
                        .uri(url, urlArgs)                     
                        .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
                        .exchange()
                        .flatMap(clientResponse -> getClassResponse(clientResponse, responseClass, isDds))                        
                );
    }


private UserResponse handleSuccess(Map map) {        
        Map<String, List<User>> apiRes = map;
}

但是,当我遍历API响应(apiRes)时,它给出了“无法将java.util.LinkedHashMap强制转换为User”。正如我检查的那样,如果Jackson无法确定确切的格式,它将自动转换为“ LinkedHashMap”。请帮忙。

请注意,我是Java开发的新手。

皮尔霍

一种技巧是声明自己的类,以保留要正确编译和强制转换的泛型类型。像这样:

@SuppressWarnings("serial")
public class DynKeyUserMap extends HashMap<String, List<User>> {}

然后代替Map.class使用DynKeyUserMap.class来防止铸造问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 JSON 字符串键重命名 JSON 字符串到 Java 对象

Java:带有ANSI转义码的Json字符串到对象

如何将字符串(带有scape字符的json)转换为动态对象?

使用动态字符串附加 JSON 对象键

将带有动态键的 JSON 响应绑定到 Java 对象

Golang字符串数组到带有json值的数组对象

带有日期的JSON字符串到Google日历

无法从 JSON 字符串中获取 Java 对象(带有内部数组)

Json字符串到Java对象Avro

json字符串到java对象以填充微调框

如何从java中的json字符串(带有子项)中删除所有键及其特定键名的值

在 PHP 中动态创建带有字符串键/索引的数组数组

Typescript - 从带有日期字符串的 Json 字符串自动转换为带有 Date 属性的对象

conwert对象,其中包含带有utf-8的字符串到具有正确编码的字符串

隐藏字符串到JSON对象

带有字符串键和接口定义内容的打字稿类型对象

在转换方法中从Map接收带有字符串键的对象

Discord登录API重定向到带有动态查询字符串的URL

301如何从带有查询字符串的动态URL重定向到基本URL?

将带有动态字符串的结构复制到缓冲区c

Java字符串到对象的列表

将字符串转换为具有重复键的对象到数组

如果字符串是动态的,则 Json 值“DE000001000150084063368”的 Jolt Spec 带有子字符串

从键中带有空格的JSON字符串获取值

c#将带有对象列表的json字符串转换为ac#对象

在 .net core 3.1 中的 json 对象中转换带有转义字符的字符串

使用动态键解析JSON字符串

从JSON字符串获取动态键的值

传递一个动态字符串到对象