将一个JacksonPOJO转换/Map为不同的Jackson POJO

ca1c2owp  于 2022-11-08  发布在  其他
关注(0)|答案(3)|浏览(130)

我有一个输入是JacksonPoJo,我需要将它转换成不同的Jackson Pojo。我找到的所有例子都来自Json -〉Pojo和Pojo -〉Json。创建一个自定义序列化器是从一个Pojo转换成另一个Pojo的方法吗?

lvmkulzt

lvmkulzt1#

如果字段名匹配,或者定义了别名,则可以简单地序列化一个对象并反序列化到另一个对象;例如:

objectMapper.readValue(objectMapper.writeValueAsBytes(object1), Object2.class)

如果字段不是一对一对齐,则没有直接的方法
因此,您有一些其他选项

  • 复制构造函数/工厂方法:new Object2(object1)Object2.from(object1)
  • 生成器/设置器:object2.setX(object1.getX()); // repeat for all fields
  • 使用ModelMapper之类的库(实际上与上面的选项相同)
  • 使用反射(非常脆弱,仅在您无权修改任何类时使用)
dw1jzc5e

dw1jzc5e2#

ModelMapper,就像OneCricketeer说的,或者MapStruct可以完成将一个POJOMap到另一个POJO的工作。

bqf10yzr

bqf10yzr3#

您可以使用***MapStruct***,如下所示:
1.添加MapStruct依赖关系:

<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct</artifactId>
    <version>1.4.2.Final</version>  
  </dependency>

示例-
Car.java

public class Car {
    private String make;
    private int seatCount;
    private CarType type;
    //constructor, getters, setters etc.
}

CarDto.java

public class CarDto {
    private String make;
    private int seatCount;
    private String type;
    //constructor, getters, setters etc.
}

CarMapper.java

@Mapper
public interface CarMapper {

    CarMapper INSTANCE = Mappers.getMapper( CarMapper.class );
    CarDto carToCarDto(Car car);
    Car carDtoToCar(CarDto carDto);
}

用途:

public void shouldMapCarToDto() {

    Car car = new Car( "Morris", 5, CarType.SEDAN );
    // mapping Car to carDto
    CarDto carDto = CarMapper.INSTANCE.carToCarDto(car);
}

更多详情-〉MapStruct

相关问题