gson 使用RestTemplate将JSON字符串(包括不同的字符串)转换为Java类

vuktfyat  于 2022-11-06  发布在  Java
关注(0)|答案(3)|浏览(245)

我有一条詹森弦像:

{
   "name": "abc",
   "type": "type1",
   "artist": {
       "name": "ally"
   },
   "other_part": "{\"id\":\"ee50abd7\",\"metadata\":"...\"}"
}

如您所见,“other_part”看起来像是宽松的格式。它以引号表示。
这里,我只想把它转换成一个POJO类。但是other_part给出了解析错误。有什么建议吗?
POJO类:

class Data
{
   private String name;
   private String type;
   private Artist artist;
   private Other other_part;
   ...getters
} 
class Artist
{
   private String name;
   ...getters
} 
class Other
{
   private String id;
   private String metadata;
   ...getters
}

和其他模板:

restTemplate.exchange(requestEntity, Data.class);

错误:
(尽管至少存在一个创建者):没有要从字符串值反序列化的字符串参数构造函数/工厂方法...
谢谢大家JsonDeserialize解决了问题:

public static class OtherConverter extends StdConverter<String, Other>
{

    @Override
    public Other convert(String value)
    {
        return new Gson().fromJson(value, Other.class);
    }
}

class Data
{
   private String name;
   private String type;
   private Artist artist;

   @JsonDeserialize( converter = OtherConverter.class )
   private Other other_part;
   ...getters
}
lztngnrs

lztngnrs1#

您可能需要创建自定义反序列化程序。

@JsonDeserialize(using = CustomDateDeserializer.class) 
   private Other other_part;

在自定义序列化程序中,您将收到字符串信息。然后,您可以使用所选的库来转换此字符串。
示例:https://www.tutorialspoint.com/jackson_annotations/jackson_annotations_jsondeserialize.htm

vulvrdjw

vulvrdjw2#

您是否尝试为类提供Setters和空构造函数,以便序列化Jackson(Spring中的默认数据序列化器),据我所知需要此构造函数。

6ojccjat

6ojccjat3#

看起来other_part只是一个字符串值,而不是JSON对象。
如果没有办法更改输入,那么我建议您为otherPart字段创建自定义的setter/parser:

@JsonProperty("other_part")
private void unpackOtherPart(String otherPart) {
   // create Other from otherPart string
}

相关问题