Как я должен сопоставить свое тело запроса с другим объектом, сохраняя те же отношения детей? - PullRequest
1 голос
/ 23 марта 2019

У меня есть тело запроса с этим классом модели:

public class IvrRequest {
    int age;
    String name;
    String address;
    List<IvrRequest> children;
}

Я хочу сопоставить это с другой моделью класса, такой как:

public class IvrMapper {
    int id;
    String name;
    List<IvrMapper> resourceElements;
}

Какой подход я должен использовать для этого?

Пример: -

{
    "age":16,
    "name":"Rohit",
    "address":"adgsgdsdfgsdfgsf",
    "children":[
    {
        "age":16,
        "name":"Rohit",
        "address":"adgsgdsdfgsdfgsf",
        "children":[{
            "age":16,
            "name":"Rohit",
            "address":"adgsgdsdfgsdfgsf"                
        }]
    },
    {
        "age":45,
        "name":"Singh",
        "address":"45afasdfas54df6asdf",
        "children":[{
            "age":55,
            "name":"nitin",
            "address":"@%^%@#^Ghagdhasdhg"              
        }]
    }]
}

Это пример для тела запроса.

1 Ответ

0 голосов
/ 23 марта 2019

Вы не указали, какую библиотеку вы используете, поэтому я предлагаю использовать Jackson, которая позволяет быструю и простую десериализацию от модели JSON до Java и от одной POJO к другой.Если вы не можете изменить класс или класс принадлежит библиотеке 3-rd party, вы всегда можете использовать MixIn функцию .Ниже приведен пример того, как:

  • десериализация JSON до IvrRequest
  • десериализация JSON в IvrMapper
  • преобразование IvrRequest в IvrMapper

Простое приложение:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.util.List;

public class JsonApp {

    public static void main(String[] args) throws Exception {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        ObjectMapper mapper = new ObjectMapper();
        mapper.addMixIn(IvrMapper.class, IvrMapperMixIn.class);

        System.out.println("Parse IvrRequest model: ");
        IvrRequest ivrRequest = mapper.readValue(jsonFile, IvrRequest.class);
        System.out.println(ivrRequest);

        System.out.println("Parse IvrMapper model: ");
        System.out.println(mapper.readValue(jsonFile, IvrMapper.class));

        System.out.println("Convert IvrRequest to IvrMapper");
        System.out.println(mapper.convertValue(ivrRequest, IvrMapper.class));
    }
}

@JsonIgnoreProperties(ignoreUnknown = true)
interface IvrMapperMixIn {

    @JsonProperty("age")
    int getId();

    @JsonProperty("children")
    List<IvrMapper> getResourceElements();
}

class IvrRequest {

    private int age;
    private String name;
    private String address;
    private List<IvrRequest> children;

    // getters, setters, toString
}

class IvrMapper {
    private int id;
    private String name;
    private List<IvrMapper> resourceElements;

    // getters, setters, toString
}

Над отпечатками приложений:

Parse IvrRequest model: 
age=16, name='Rohit', address='adgsgdsdfgsdfgsf'
 children=
    age=16, name='Rohit', address='adgsgdsdfgsdfgsf'
 children=
    age=16, name='Rohit', address='adgsgdsdfgsdfgsf'

    age=45, name='Singh', address='45afasdfas54df6asdf'
 children=
    age=55, name='nitin', address='@%^%@#^Ghagdhasdhg'


Parse IvrMapper model: 
id=16, name='Rohit'
 resourceElements=
    id=16, name='Rohit'
 resourceElements=
    id=16, name='Rohit'

    id=45, name='Singh'
 resourceElements=
    id=55, name='nitin'


Convert IvrRequest to IvrMapper
id=16, name='Rohit'
 resourceElements=
    id=16, name='Rohit'
 resourceElements=
    id=16, name='Rohit'

    id=45, name='Singh'
 resourceElements=
    id=55, name='nitin'
...