RestTemplate.exchange请求返回值包含list对象嵌套错误的情况

简单做个记录,问题简单表述:使用restTemplate.exchange请求某个GET方法时,返回值的对象内包含list,list的嵌套出现错误

1、问题

之前一个Spring Boot项目中使用restTemplate做请求转发,在请求某个GET方法后,发现获取的返回值结构出现了问题:

正常对象应当是:

{
    "data":{
        "myList": [
            {"name":"1"},
            {"name":"2"},
            {"name":"3"}
        ]
    }
}

实际返回变成了:

{
    "data": {
        "myList": {
            "myList": [
                {
                    "name": "1"
                },
                {
                    "name": "2"
                },
                {
                    "name": "3"
                }
            ]
        }
    }
}

如果myList内只有一个元素,则整个list都会变成一个对象:

{
    "data": {
        "myList": {
            {
                "name": "1"
            }

        }
    }
}

 

2、定位

一步步debug后发现,exchange.getBody()的返回值展开后为XML格式,数组或列表对象会被解析为<myList><myList>…………<myList></myList>,导致默认的反序列化方法出错

 

3、解决

这边只是使用headers.setAccept() 指定了restTemplate的header内的accept为application/json格式,解析后返回值格式正确,若为XML格式的返回,需要做其他处理,改天再写

posted @ 2023-01-30 18:35  糖醋小灰  阅读(751)  评论(0)    收藏  举报