gpt4 book ai didi

java - 我应该如何将请求主体映射到另一个对象,同时保持相同的子关系?

转载 作者:太空宇宙 更新时间:2023-11-04 09:46:55 26 4
gpt4 key购买 nike

我有一个带有此模型类的请求正文:

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"
}]
}]
}

这是请求正文的示例。

最佳答案

您没有指定您使用哪个库,所以我建议使用 Jackson它允许快速轻松地从 JSON 到 Java 模型以及从一个 POJO 到另一个 POJO 反序列化。如果您无法更改类或类属于 3-rd party 库,您可以随时使用 MixIn feature 。下面的示例展示了如何:

  • 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'

关于java - 我应该如何将请求主体映射到另一个对象,同时保持相同的子关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55310777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com