我正在尝试将传入的 json 负载映射到模型类的数组列表。 我有一个解决方案,但它不直观。 我尝试这样做,但出现编译错误 -
ObjectMapper mapper = new ObjectMapper();
ArrayList<ModelClass> = mapper.readValue(items, RoleAttribute.class);
仅供引用,我正在尝试将此数据保存在 Mongo 集合中。
Controller -
@PostMapping(value="/resource", consumes="application/json")
public Iterable<ModeClass> createResources(@RequestBody JSONObject requestBody ) throws JsonParseException, JsonMappingException, IOException {
System.out.println(requestBody.getClass());
return serviceImpl.saveResources(requestBody);
}
模型类-
@Data
@AllArgsConstructor
@Document(collection="collection-name")
public
class ModelClass{
@Field
private String ID;
@Field
private String description;
}
有效负载采用以下格式 -
{
"data": [
{
"ID": "1",
"description": "desc1"
},
{
"ID": "2",
"description": "desc2"
},
{
"ID": "3",
"description": "desc3"
},
{
"ID": "4",
"description": "desc4"
}
....
]
}
我知道我应该使用 jackson ,但我似乎无法弄清楚这一点。我需要更改 POJO 吗?我需要创建自定义 Jackson 配置吗?
最佳答案
可以用json注解来实现。我还注意到您的值在 json 中表示为 data
,因此也需要注意。看下面的代码。这将解决您的问题。
import com.fasterxml.jackson.annotation.JsonProperty;
@Data
@AllArgsConstructor
@Document(collection="collection-name")
public class ModelClass{
@Field
@JsonProperty("ID")
private String classID;
@Field
@JsonProperty("description")
private String classDescription;
public String getClassID() {
return classID;
}
public void setClassID(String classID) {
this.classID = classID;
}
public String getClassDescription() {
return classDescription;
}
public void setClassDescription(String classDescription) {
this.classDescription = classDescription;
}
}
包装数据类如下
class Data {
ModelClass[] data;
public ModelClass[] getData() {
return data;
}
public void setData(ModelClass[] data) {
this.data = data;
}
}
json转换代码如下
ObjectMapper mapper = new ObjectMapper();
// json is your incoming json as a string. You can put inputstream also
Data values = mapper.readValue(json, Data.class);
System.out.println(values.getData().length);
System.out.println(values.getData()[0].getClassID());
关于java - 努力将 JSON 负载映射到模型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60640013/