【问题标题】:map inherited DTO to Entity将继承的 DTO 映射到实体
【发布时间】:2022-01-02 18:12:13
【问题描述】:

我有接受继承 DTO 的 RestController:

@JsonSubTypes({
        @JsonSubTypes.Type(value = RealTimeEventDTO.class, name = "real-time"),
        @JsonSubTypes.Type(value = ScheduledEventDTO.class, name = "scheduled")
})
public class EventDTO {

    private Long id;

}

@Data
@NoArgsConstructor
public class RealTimeEventDTO extends EventDTO {

    private EventTriggerDTO eventTrigger;

    @Builder
    public RealTimeEventDTO(Long id, EventTriggerDTO eventTrigger) {
        super(id);
        this.eventTrigger = eventTrigger;
    }
}

我在域中具有相同的结构。我需要将 DTO 映射到实体。

 private Event toEvent(EventDTO event) {
        return null;
    }

如何将继承的 DTO 映射到实体?

【问题讨论】:

    标签: java spring mapping


    【解决方案1】:

    看看Mapstruct,正确映射实体和dto很有用

    Event.java

    public class Event {
        private Long id;
        private String content;
    
       // constructor, getters, setters, toString etc.
    }
    

    EventDTO.java

    public class EventDTO {
        private Long id;
        private String payload;
    
       // constructor, getters, setters, toString etc.
    }
    

    IEventMapper.java

    @Mapper
    public interface IEventMapper {
    
        IEventMapper INSTANCE = Mappers.getMapper(IEventMapper.class);
    
        @Mapping(source = "payload", target = "content")
        public Event eventDTOToEvent(EventDTO eventDTO);
    }
    

    pom.xml

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

    用法

    public class App {
        public static void main(String[] args) {
    
            EventDTO eventDTO = new EventDTO(123L, "Hello World !");
    
            Event event = IEventMapper.INSTANCE.eventDTOToEvent(eventDTO);
    
            System.out.println(event);
            System.out.println(eventDTO);
    
        }
    }
    

    结果

    Event {id=123, content='Hello World !'}
    EventDTO {id=123, payload='Hello World !'}
    

    【讨论】:

    • 考虑为 OP 用例添加一个示例,以便您的问题更加完整和有用;)谢谢!
    • 已编辑!感谢@JoãoDias 的建议 :)
    • 不客气 ;)
    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 2018-09-13
    • 2015-08-02
    • 2021-12-31
    • 1970-01-01
    • 2017-09-17
    相关资源
    最近更新 更多