在Spring-boot中使用整数键和字符串值对JSON进行反序列化

问题描述

我必须使用Feign库在Spring-boot中反序列化并序列化一个简单的JSON,该整数具有整数键和字符串值。我知道,如果键在String中,这在带有自动序列化和反序列化的Spring-boot中非常简单。我的JSON看起来像:

"avatar": {
            "48x48": "https://wfrjira.int.abc.com/secure/useravatar?ownerId=person&avatarId=1234","24x24": "https://wfrjira.int.abc.com/secure/useravatar?size=small&ownerId=person&avatarId=1234"
        }

我的带有合适的getter和setters类的POJO bean是:

class Avatar {
private String _48x48;
private String _24x24;

public Avatar() {
}

public Avatar(String _48x48,String _24x24) {
    this._48x48 = _48x48;
    this._24x24 = _24x24;
}                               Getters and Setter ...

我遇到以下错误

发生意外错误(类型=内部服务器错误,状态= 500)。 提取类型[class [Lcom.XXXXXX.JiraResourceData;]和内容类型[application / json; charset = UTF-8]的响应时出错;嵌套异常是org.springframework.http.converter.HttpMessageNotReadableException:JSON解析错误:无法从START_OBJECT令牌中反序列化[Lcom.XXXXXX.JiraResourceData;实例;嵌套的异常是com.fasterxml.jackson.databind.exc.MismatchedInputException:无法从[来源:(pushbackinputstream)的START_OBJECT令牌中反序列化[Lcom.XXXXXX.JiraResourceData;的实例。行:1,列:1] feign.codec.DecodeException:提取类型[class [Lcom.XXXXXX.JiraResourceData;]和内容类型[application / json; charset = UTF-8]的响应时出错;嵌套的异常是org.springframework.http.converter.HttpMessageNotReadableException:JSON解析错误:无法从START_OBJECT令牌中反序列化[Lcom.XXXXXX.JiraResourceData;的实例;嵌套异常是com.fasterxml.jackson.databind.exc.MismatchedInputException:无法从START_OBJECT令牌中反序列化[Lcom.XXXXXX.JiraResourceData;实例 在[来源:(pushbackinputstream);行:1,列:1]

我知道我需要用与JSON键匹配的名称声明Avatar类中的变量,但不能以数字开头声明字符串。在Spring-boot中还有其他解决方法吗?任何帮助将不胜感激。

解决方法

首先,您最后的JSON行带有逗号。删除它。此外,JSON应该嵌入另一组括号中。

另外,由于您的班级是大写字母,而您的@JsonRootName("avatar")是小写字母,因此请用JSON注释您的班级。

此外,您可能想将字段重命名为JSON中的字段名称,或使用@JsonProperty("my-json-name")进行注释