将继承的 DTO 映射到实体
map inherited DTO to Entity
我有接受继承 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 映射到实体?
看看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 !'}
我有接受继承 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 映射到实体?
看看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 !'}