使用依赖注入反序列化

Deserialize with Dependency Injection

我有一个嵌套的 Json 对象,我想将它反序列化为 Account 对象。

Json 示例:

   {
     "status": "OK",
     "output": {
    "accountNum": ".....",
    "customerType": ".....",
    "homeNumber": ".....",
    "homeIndicator": ".....",
    "eligible": true,
    "startDate": "2017-01-01",
    "contactDetails": {
        "firstName": ".....",
        "lastName": ".....",
        "addressStreet": ".....",
    },
    "indicators": [
        "ind1",
        "ind2",
    ],
    "employees": [
        {
            "name": ".....",
            "email": ".....",
            "model": ".....",
            "program": [
                {
                    "name": ".....",
                    "date": "....."
                },
                {
                    "name": ".....",
                    "date": "....."
                }
            ],
            "type": ".....",
            "indicators": [
                "....."
            ],
            "customer": false
        }
    ],
}
 }

因为它是嵌套的 Json 我正在使用以下方法来做到这一点:

ObjectMapper mapper = new ObjectMapper();
    Flux<Timed<XXXDto >> mergedMonos = Flux.fromIterable(jsonList).flatMapSequential(Function.identity());
    mergedMonos.map(timed -> mapper.valueToTree(timed.get())).collectList().subscribe(System.out::print);

@Component
public class XXXDto {

@Autowired
private Account account;

@JsonProperty("output")
private void unpackOutput(Map<String, Object> output) {
    //Account a1 = new Account();
    // this.account.setAccountNum is null 

    output.get("accountNum");

问题是我想将“accountNum”存储在 Account 对象中,但在反序列化过程中注入的 Account 为空。

我可以在 unpackOutput 方法中创建一个实例,但我想看看是否有通过注入的其他选项。

如有任何建议,我们将不胜感激。

谢谢

我能够使用这些 类 和这段代码反序列化示例输入。

首先,这里是格式化输入:

{
   "status":"OK",
   "output":{
      "accountNum":".....",
      "customerType":".....",
      "homeNumber":".....",
      "homeIndicator":".....",
      "eligible":true,
      "startDate":"2017-01-01",
      "contactDetails":{
         "firstName":".....",
         "lastName":".....",
         "addressStreet":"....."
      },
      "indicators":[
         "ind1",
         "ind2"
      ],
      "employees":[
         {
            "name":".....",
            "email":".....",
            "model":".....",
            "program":[
               {
                  "name":".....",
                  "date":"....."
               },
               {
                  "name":".....",
                  "date":"....."
               }
            ],
            "type":".....",
            "indicators":[
               "....."
            ],
            "customer":false
         }
      ]
   }
}

这些是我使用的类:

public class ContactDetails{
    public String firstName;
    public String lastName;
    public String addressStreet;
}

public class Program{
    public String name;
    public String date;
}

public class Employee{
    public String name;
    public String email;
    public String model;
    public List<Program> program;
    public String type;
    public List<String> indicators;
    public boolean customer;
}

public class Output{
    public String accountNum;
    public String customerType;
    public String homeNumber;
    public String homeIndicator;
    public boolean eligible;
    public String startDate;
    public ContactDetails contactDetails;
    public List<String> indicators;
    public List<Employee> employees;
}

public class Root{
    public String status;
    public Output output;
}

这是我用来反序列化的代码:

ObjectMapper objectMapper = new ObjectMapper();

Root root = objectMapper.readValue(input2, Root.class);

这很简单所以我想知道我是否遗漏了什么。