import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@Component
public class DateMapper {
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
public LocalDateTime map(String value) {
return value != null ? LocalDateTime.parse(value, FORMATTER) : null;
}
}
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@Mapper(componentModel = "spring")
public interface PetMapper {
@Mapping(source = "name", target = "petName")
@Mapping(source = "color", target = "furColor")
PetDTO toDTO(Pet pet);
}
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@Mapper(componentModel = "spring", uses = {DateMapper.class, PetMapper.class})
public interface UserMapper {
@Mapping(source = "name", target = "fullName")
@Mapping(source = "email", target = "emailString")
@Mapping(source = "date", target = "createdAt")
UserDTO toDTO(UserRequest request);
}
public record Pet(String name, String color){}
public record PetDTO(String petName, String furColor){ }
import java.util.List;
public record UserRequest(
String name,
String email,
String date,
List<Pet> pets
){}
import java.time.LocalDateTime;
import java.util.List;
public record UserDTO(
String fullName,
String emailString,
LocalDateTime createdAt,
List<PetDTO> pets
){}
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.util.List;
@Slf4j
@SpringBootApplication
@RequiredArgsConstructor
public class MapstructDemoApplication implements CommandLineRunner {
private final UserMapper userMapper;
public static void main(String[] args) {
SpringApplication.run(MapstructDemoApplication.class, args);
}
@Override
public void run(String... args) {
var request = new UserRequest(
"Alice",
"[email protected]",
"2024-06-25T15:30:00",
List.of(
new Pet("Fluffy", "white"),
new Pet("Shadow", "black")
)
);
var dto = userMapper.toDTO(request);
log.info("Mapped UserDTO: {}", dto);
}
}
public record UserRequest(
String name,
String email
){}
public record UserDTO(
String fullName,
String emailString
){}
@Mapper(componentModel = "spring")
public interface UserMapper {
@Mapping(source = "name", target = "fullName")
@Mapping(source = "email", target = "emailString")
UserDTO toDTO(UserRequest request);
}
@Slf4j
@SpringBootApplication
@RequiredArgsConstructor
public class MapstrictDemoApplication implements CommandLineRunner {
private final UserMapper userMapper;
public static void main(String[] args) {
SpringApplication.run(MapstrictDemoApplication.class, args);
}
@Override
public void run(String... args) {
var request = new UserRequest("Alice", "[email protected]");
var dto = userMapper.toDTO(request);
log.info("Mapped UserDTO: {}", dto);
}
}
Для офисных задач точно подойдёт, но вот с виртуалкой на Винде могут быть проблемы.