【问题标题】:JSON parse error: Cannot deserialize when using spring RestTemplate.exhangeJSON解析错误:使用spring RestTemplate.exchange时无法反序列化
【发布时间】:2020-08-24 16:56:56
【问题描述】:

我是 JSON 和 spring 的新手。能够编写使用 REST Web 服务的简单示例。但当我应用于实时场景时,JSON 是嵌套的,我无法控制更改结构。

下面的代码给我Parse Error. Cannot deserialize instance of pg.domain.LookupDo[] out of START_OBJECT token

LookupDo[] lookupDos =  template.exchange(url, HttpMethod.GET, request, LookupDo[].class).getBody();

如何构造域对象?

@JsonIgnoreProperties
public class LookupDo {

    private String companyCode;
    private String plant;
    private String category;
    private String value;
    private String descr;

【问题讨论】:

    标签: json spring parsing resttemplate


    【解决方案1】:

    您需要将您的类与您的 JSON 结构相匹配

    Response res = template.exchange(url, HttpMethod.GET, request, Response.class).getBody();
    LookupDo[] lookupDos = res.getD().getResults();
    
    public class Response{
       private Data d;
       ...
    }
    public class Data{
       private LookupDo[] results;
       ...
    }
    

    【讨论】:

    • 感谢您的回复。但不知何故,数据没有加载,虽然没有更多的解析异常,但是 CompanyCode、Plant 等总是为空。只是为了检查我是否添加了 __metadata (请参阅上面的我的 json 对象),即使它不需要,我添加了一个类“元数据”并且该部分正在加载。但不是 CompanyCode 和 Plant 等。我花了足够的时间确保嵌套对象与 Json 对齐。唯一值得怀疑的是可变情况。 Json 在 CompanyCode 中具有大写 C。在java中我得到了companyCode。不确定它是否有问题。我尝试了任何一种情况,但都没有成功。
    • 确保你使用 getter setter 和构造函数作为类,companyCode -> CompanyCode 大写第一个,如 json 格式
    • 抱歉,还是不行。查看调试窗口截图i.imgur.com/9SZNMc9.jpg
    • 问题是json中的大驼峰我认为,你可以用json中的小驼峰作为你的类来测试。
    • 谢谢。它终于奏效了。欣赏。是的。你说的对。最后,我与服务提供商(准备 json 的人)交谈,要求他将第一个字符作为小写字母,它终于奏效了。但不知何故,我不相信我们这样做的方式。 (1) 有这么多嵌套对象 (2) 强制让 json 属性第一个 char 小写。必须有更好/更清洁的解决方案。无论如何,让它工作。谢谢你的时间罗诺
    猜你喜欢
    • 2018-12-26
    • 1970-01-01
    • 2020-04-13
    • 2020-12-10
    • 2019-04-28
    • 2021-06-28
    • 2019-08-26
    • 2021-05-11
    • 1970-01-01
    相关资源
    最近更新 更多