Skip to content

Commit 56e0df7

Browse files
committed
Example based on demo project
1 parent 435fc40 commit 56e0df7

10 files changed

Lines changed: 165 additions & 0 deletions

File tree

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
plugins {
2+
id "org.springframework.boot" version "2.4.4"
3+
id "io.spring.dependency-management" version "1.0.11.RELEASE"
4+
}
5+
6+
dependencies {
7+
annotationProcessor project(":extensions")
8+
implementation project(":examples:model")
9+
implementation project(":annotations")
10+
11+
implementation 'org.mapstruct:mapstruct:1.4.0.Final'
12+
annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.0.Final'
13+
implementation 'org.springframework.boot:spring-boot-starter'
14+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package org.mapstruct.extensions.spring.example.boot;
2+
3+
import org.mapstruct.extensions.spring.converter.ConversionServiceAdapter;
4+
import org.mapstruct.extensions.spring.example.Car;
5+
import org.mapstruct.extensions.spring.example.CarDto;
6+
import org.mapstruct.extensions.spring.example.SeatConfiguration;
7+
import org.mapstruct.extensions.spring.example.SeatMaterial;
8+
import org.slf4j.Logger;
9+
import org.slf4j.LoggerFactory;
10+
import org.springframework.boot.CommandLineRunner;
11+
import org.springframework.boot.SpringApplication;
12+
import org.springframework.boot.autoconfigure.SpringBootApplication;
13+
import org.springframework.context.ApplicationContext;
14+
import org.springframework.context.annotation.Bean;
15+
16+
@SpringBootApplication
17+
public class Start {
18+
public static void main(String[] args) {
19+
SpringApplication.run(Start.class, args);
20+
}
21+
22+
private static final Logger log = LoggerFactory.getLogger(Start.class);
23+
24+
@Bean
25+
public CommandLineRunner commandLineRunner(ApplicationContext ctx, ConversionServiceAdapter adapter) {
26+
return args -> {
27+
final SeatConfiguration seatConf = new SeatConfiguration();
28+
seatConf.setSeatMaterial(SeatMaterial.FABRIC);
29+
final Car car = new Car();
30+
car.setMake("make");
31+
car.setSeatConfiguration(seatConf);
32+
33+
log.info("map start");
34+
final CarDto carDto = adapter.mapCarToCarDto(car);
35+
log.info(carDto.toString());
36+
};
37+
}
38+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.mapstruct.extensions.spring.example.boot.config;
2+
3+
import org.slf4j.LoggerFactory;
4+
import org.springframework.beans.factory.ListableBeanFactory;
5+
import org.springframework.boot.convert.ApplicationConversionService;
6+
import org.springframework.context.annotation.Bean;
7+
import org.springframework.context.annotation.Configuration;
8+
import org.springframework.core.convert.ConversionService;
9+
import org.springframework.core.convert.converter.Converter;
10+
import org.springframework.format.support.DefaultFormattingConversionService;
11+
import org.springframework.format.support.FormattingConversionService;
12+
13+
@Configuration
14+
public class ConverterConfig {
15+
private final ListableBeanFactory beanFactory;
16+
17+
public ConverterConfig(ListableBeanFactory beanFactory) {
18+
this.beanFactory = beanFactory;
19+
}
20+
21+
/**
22+
* without spring-boot-starter-web, no custom mappers will be added automatically;
23+
* register manually we register manually all our {@link Converter}
24+
*/
25+
@Bean
26+
public ConversionService conversionService() {
27+
LoggerFactory.getLogger(ConverterConfig.class).info("ConversionService bean init");
28+
final FormattingConversionService service = new DefaultFormattingConversionService();
29+
ApplicationConversionService.addBeans(service, this.beanFactory);
30+
return service;
31+
}
32+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.mapstruct.extensions.spring.example.boot.mappers;
2+
3+
import org.mapstruct.Mapper;
4+
import org.mapstruct.Mapping;
5+
import org.mapstruct.extensions.spring.example.Car;
6+
import org.mapstruct.extensions.spring.example.CarDto;
7+
import org.springframework.core.convert.converter.Converter;
8+
9+
@Mapper(config = MapperSpringConfig.class)
10+
public interface CarMapper extends Converter<Car, CarDto> {
11+
@Mapping(target = "seats", source = "seatConfiguration")
12+
CarDto convert(Car car);
13+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.mapstruct.extensions.spring.example.boot.mappers;
2+
3+
import org.mapstruct.MapperConfig;
4+
import org.mapstruct.extensions.spring.converter.ConversionServiceAdapter;
5+
6+
@MapperConfig(componentModel = "spring", uses = ConversionServiceAdapter.class)
7+
public interface MapperSpringConfig {
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.mapstruct.extensions.spring.example.boot.mappers;
2+
3+
import org.mapstruct.Mapper;
4+
import org.mapstruct.Mapping;
5+
import org.mapstruct.extensions.spring.example.SeatConfiguration;
6+
import org.mapstruct.extensions.spring.example.SeatConfigurationDto;
7+
import org.springframework.core.convert.converter.Converter;
8+
9+
@Mapper(config = MapperSpringConfig.class)
10+
public interface SeatConfigurationMapper extends Converter<SeatConfiguration, SeatConfigurationDto> {
11+
@Mapping(target = "seatCount", source = "numberOfSeats")
12+
@Mapping(target = "material", source = "seatMaterial")
13+
SeatConfigurationDto convert(SeatConfiguration seatConfiguration);
14+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.mapstruct.extensions.spring.example.boot.mappers;
2+
3+
import org.mapstruct.Mapper;
4+
import org.mapstruct.extensions.spring.example.Wheel;
5+
import org.mapstruct.extensions.spring.example.WheelDto;
6+
import org.mapstruct.extensions.spring.example.boot.mappers.MapperSpringConfig;
7+
import org.springframework.core.convert.converter.Converter;
8+
9+
@Mapper(config = MapperSpringConfig.class)
10+
public interface WheelMapper extends Converter<Wheel, WheelDto> {
11+
@Override
12+
WheelDto convert(Wheel source);
13+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.mapstruct.extensions.spring.example.boot.mappers;
2+
3+
import org.mapstruct.Mapper;
4+
import org.mapstruct.extensions.spring.example.WheelDto;
5+
import org.mapstruct.extensions.spring.example.Wheels;
6+
import org.mapstruct.extensions.spring.example.boot.mappers.MapperSpringConfig;
7+
import org.springframework.core.convert.converter.Converter;
8+
9+
import java.util.List;
10+
11+
@Mapper(config = MapperSpringConfig.class)
12+
public interface WheelsDtoListMapper extends Converter<List<WheelDto>, Wheels> {
13+
@Override
14+
Wheels convert(List<WheelDto> source);
15+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.mapstruct.extensions.spring.example.boot.mappers;
2+
3+
import org.mapstruct.Mapper;
4+
import org.mapstruct.extensions.spring.example.Wheel;
5+
import org.mapstruct.extensions.spring.example.WheelDto;
6+
import org.mapstruct.extensions.spring.example.Wheels;
7+
import org.mapstruct.extensions.spring.example.boot.mappers.MapperSpringConfig;
8+
import org.springframework.core.convert.converter.Converter;
9+
10+
import java.util.List;
11+
12+
@Mapper(config = MapperSpringConfig.class, imports = Wheel.class)
13+
public interface WheelsMapper extends Converter<Wheels, List<WheelDto>> {
14+
@Override
15+
List<WheelDto> convert(Wheels source);
16+
}

settings.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,6 @@ include "examples:packagename"
99
include "examples:classname"
1010
include "examples:packagename-and-classname"
1111
include "examples:custom-conversion-service-bean"
12+
include "examples:simple-springboot"
1213
include "docs"
14+

0 commit comments

Comments
 (0)