我有一个String格式的JSON值,如下所示。
{
"Sample": {
"name": "some name",
"key": "some key"
},
"Offering": {
"offer": "some offer",
"amount": 100
}
}
现在,如果我尝试按以下方式对此进行映射,则可以正常工作并映射良好。
//mapper is ObjectMapper;
//data is the above json in String format
Map vo = mapper.readValue(data, Map.class);
但是我想如下将其映射到自定义Data类。
Data vo = mapper.readValue(data, Data.class);
当我这样做时,vo的结果为空。
有关Data类的结构,请参阅以下内容。
@Getter
@Setter
public class Data {
private Sample sample;
private Offering offering;
}
@Getter
@Setter
public class Offering {
public String offer;
public int amount;
}
@Getter
@Setter
public class Sample {
private String name;
private String key;
}
请告知我在做什么错。谢谢。
答案 0 :(得分:4)
这里的Word Case似乎有问题。 它在您的json中的“样本”。 但是它的“样本”在java文件中。 对于产品也是如此。
如果您想在不更改大小写的情况下进行映射,则可以使用@JsonProperty。
答案 1 :(得分:4)
有两种选择:
如果您可以更改json
-您必须将Sample
更改为sample
,将Offering
更改为offering
将您的Data
类更改为:
@Getter
@Setter
public class Data {
@JsonProperty("Sample")
private Sample sample;
@JsonProperty("Offering")
private Offering offering;
}
在第二个选项中,您必须告诉Jackson
您想将输入json
的哪些属性映射到类的哪些属性,因为默认情况下它将尝试映射到小写的属性名称。
答案 2 :(得分:4)
可能是由于json字符串和Demo模型中字段的映射名称不同。 json字符串中为“样本”,而模型类中为“样本”。
您可以使用@JsonProperty
@JsonProperty("Sample")
private Sample sample;
@JsonProperty("Offering")
private Offering offering;