java - 努力将 JSON 负载映射到模型类

标签 java json spring-boot jackson

我正在尝试将传入的 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/

相关文章:

java - NoClassDefFoundError 无法初始化类

java - 如何在不覆盖 Sets 的情况下将多个 Maps <Character, Set<String>> 组合在一起

ruby-on-rails - 在 Rails 中,如何使用 View 呈现 JSON?

python - 如何分离 Chatterbot 的 JSON 输出

javascript - 获取 JSON 的 Angular 长度

java - UriComponentsBuilder - 如何替换一些queryParams并删除未使用的?

java - Spring Boot 启用 http/2 协议(protocol)

java - 如何测试传递的对象是集合还是数组

java - 如何在 PrimeFaces 中使用未缩小版本的 jQuery?

java - Thymeleaf 显示列表对象的字段