繁体   English   中英

How to deserialize a HttpEntity containing Array Lists from Rest API call to a Java Object?

[英]How to deserialize a HttpEntity containing Array Lists from Rest API call to a Java Object?

我正在尝试反序列化 Rest API 对 Java 对象的调用返回的 ResponseEntity<> 并没有成功。 以下是 POJO


    public class Application {
           private String name;
           private List<String> location;
    } 

这是 Rest API 调用和反序列化

public List<Application> getApps(){
       List<Application> = new ArrayList<>();
       ResponseEntity<String> returnObject = oauthRestTemplate.exchange(url, HttpMethod.POST, httpEntity, 
           String.class);
       ObjectMapper objectMapper = new ObjectMapper();
       Response response = objectMapper.readValue(returnObject.getBody(),
           Response.class);
       apps = objectMapper.convertValue(
                    response.getItems(),
                    new TypeReference<List<Application>>() {
                    }
            );
       return apps;
}

响应 Java Object 是


    public class Response {
           private String code;
           private String message;
           private String Status;
           private List<T> items;
    }

返回响应(returnObject.getBody())的内容是


    <Response>
        <code>200</code>
        <message></message>
        <status>SUCCESSFUL</status>
        <items>
            <items>
                <name>App1</name>
                <location>
                    <location>location1</location>
                </location>
            </items>
            <items>
                <name>App2</name>
                <location>
                    <location>location1</location>
                </location>
            </items>
        </items>
    </Response>

很难理解为什么要将 List 的附加标签添加到 JSON 字符串中。 当在位置中遇到位置标签时,反序列化失败。 以下是错误日志


    com.fasterxml.jackson.core.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
     at [Source: (String)"<PagedResponse><code>200</code><message/><status>SUCCESSFUL</status><items><items><name>App1</name><location>" line: 1, column: 2]

有人可以帮我理解我在这里做错了什么吗?

更新将“ObjectMapper”修改为“XmlMapper”并收到以下错误。


    java.lang.IllegalArgumentException: Cannot deserialize instance of `java.util.ArrayList` out of START_OBJECT token
     at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: java.util.ArrayList[0]->com.example.dto.Application["location"])
            at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:3750)
            at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:3678)

看起来您正在使用 JSON 解析器来解析 XML。 它在开始时失败: line: 1, column: 2

如果您的响应是 XML 格式的用户 XMLMapper。 这里是参考https://www.baeldung.com/jackson-xml-serialization-and-deserialization

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM