spring 使用Sping Boot 和JacksonMapPojo中嵌套的JSON

1tuwyuhd  于 9个月前  发布在  Spring
关注(0)|答案(2)|浏览(96)

如何在Sping Boot 中Map嵌套的JSON?

cnh2zyt3

cnh2zyt31#

你可以通过粘贴json到java pojo generators在线使用json,然后选择语言和数据库并完成。
http://www.jsonschema2pojo.org/

pnwntuvh

pnwntuvh2#

我假设你想在post请求中发送json数据到API端点。
您可以简单地将任何嵌套的JSON结构Map到Java POJO类中。
在您的示例中,您有一个对象数组。
让我用一个类似的例子来解释。为了简单起见,让我们考虑以下JSON数据。

[
  {
    "property1": "value1",
    "array": [
      {
        "property2": "value2"
      }
    ]
  }
]

所以首先让我们创建一个dao类来Map这个对象。
我们需要创建两个类。

  1. NestedObject.java
package com.example.demo.nested;

import java.util.List;

public class NestedObject {
    private final String property1;

    private final List<Property> array;

    public NestedObject() {
        this.property1 = null;
        this.array = null;
    }

    public NestedObject(String property1, List<Property> array) {
        this.property1 = property1;
        this.array = array;
    }

    public String getProperty1() {
        return property1;
    }

    public List<Property> getArray() {
        return array;
    }

    @Override
    public String toString() {
        return "NestedObject{" +
                "property1='" + property1 + '\'' +
                ", array=" + array +
                '}';
    }
}
  1. Property.java
package com.example.demo.nested;

import com.fasterxml.jackson.annotation.JsonProperty;

public class Property {
    private final String property2;

    public Property() {
        this.property2 = null;
    }

    public Property(String property2) {
        this.property2 = property2;
    }

    @JsonProperty("property2")
    public String getProperty2() {
        return property2;
    }

    @Override
    public String toString() {
        return "Property{" +
                "property2='" + property2 + '\'' +
                '}';
    }
}

不要忘记添加no arg构造函数!
现在控制器

  1. Controller.java
package com.example.demo;

import com.example.demo.nested.NestedObject;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class Controller {
    @PostMapping("/")
    public List<NestedObject> post(@RequestBody List<NestedObject> request) {
        System.out.println(request);
        return request;
    }
}

这对我很有效。请尝试一下,让我知道这是否适合你。

相关问题