[英]Convert Jackson Pojo to Different Jackson Pojo
I have an input that is a Jackson PoJo and I need to convert it to a different Jackson Pojo.我有一个输入是 Jackson Pojo,我需要将其转换为不同的 Jackson Pojo。 All examples I am finding are from Json -> Pojo and Pojo -> Json.我找到的所有示例都来自 Json -> Pojo 和 Pojo -> Json。 Is creating a custom serializer the way to convert from one Pojo to another?创建自定义序列化程序是从一个 Pojo 转换为另一个 Pojo 的方式吗?
If the field names match, or have aliases defined, you could simply serialize one object and deserialize into the other;如果字段名称匹配,或者定义了别名,您可以简单地序列化一个 object 并反序列化到另一个; eg例如
objectMapper.readValue(objectMapper.writeValueAsBytes(object1), Object2.class)
If the fields don't align one-to-one, there isn't a direct way如果字段没有一对一对齐,则没有直接的方法
Therefore, you have some other options因此,您还有其他一些选择
new Object2(object1)
or Object2.from(object1)
复制构造函数/工厂方法: new Object2(object1)
或Object2.from(object1)
object2.setX(object1.getX()); // repeat for all fields
生成器/设置器: object2.setX(object1.getX()); // repeat for all fields
object2.setX(object1.getX()); // repeat for all fields
You can use MapStruct like below:您可以使用MapStruct ,如下所示:
Add MapStruct
dependency:添加MapStruct
依赖:
<dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>1.4.2.Final</version> </dependency>
Example-例子-
Car.java汽车.java
public class Car {
private String make;
private int seatCount;
private CarType type;
//constructor, getters, setters etc.
}
CarDto.java CarDto.java
public class CarDto {
private String make;
private int seatCount;
private String type;
//constructor, getters, setters etc.
}
CarMapper.java CarMapper.java
@Mapper
public interface CarMapper {
CarMapper INSTANCE = Mappers.getMapper( CarMapper.class );
CarDto carToCarDto(Car car);
Car carDtoToCar(CarDto carDto);
}
Use:利用:
public void shouldMapCarToDto() {
Car car = new Car( "Morris", 5, CarType.SEDAN );
// mapping Car to carDto
CarDto carDto = CarMapper.INSTANCE.carToCarDto(car);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.