Spring Usage
Using ShapeShift with a Spring Boot project.
In this guide we will see how we can use ShapeShift's Spring Boot starter to seamlessly add transformers and decorators within Spring projects.
The Spring Boot starter automatically registers mapping transformer beans and decorator beans, as well as a customizer for cases where further customization of the ShapeShift instance is required.
Install the spring library via
Maven
or Gradle
:<dependency>
<groupId>dev.krud</groupId>
<artifactId>spring-boot-starter-shapeshift</artifactId>
<version>0.8.0</version>
</dependency>
implementation 'dev.krud:spring-boot-starter-shapeshift:0.8.0'
implementation("dev.krud:spring-boot-starter-shapeshift:0.8.0")
In order to register a new transformer, simply create the class and register it as a Spring Bean via your method of choice. (JavaConfig, XML)
Kotlin
Java
@Component
class BeanTransformer : MappingTransformer<String, String> {
override fun transform(context: MappingTransformerContext<out String>): String? {
return context.originalValue?.uppercase()
}
}
@Component
public class BeanTransformer implements MappingTransformer<String, String> {
@Nullable
@Override
public String transform(@NonNull MappingTransformerContext<? extends String> context) {
return context.getOriginalValue() != null ? context.getOriginalValue().toUpperCase() : null;
}
}
Kotlin
Java
@Configuration
class MyConfiguration {
@Bean
fun beanTransformer(): BeanTransformer {
return BeanTransformer()
}
}
@Configuration
public class MyConfiguration {
@Bean
public BeanTransformer beanTransformer() {
return new BeanTransformer();
}
}
Default transformers cannot be registered in this way, see Using Customizers below on how to achieve this
You can register decorators in the same way that you register transformers, simply create the class and register it as a Spring Bean via your method of choice. (JavaConfig, XML)
Kotlin
Java
@Component
class BeanDecorator: MappingDecorator<MyPojo, MyPojoDisplay> {
override fun decorate(context: MappingDecoratorContext<MyPojo, MyPojoDisplay>) {
// decorate
}
}
@Component
public class BeanDecorator implements MappingDecorator<MyPojo, MyPojoDisplay> {
@Override
public void decorate(@NonNull MappingDecoratorContext<MyPojo, MyPojoDisplay> context) {
// decorate
}
}
Kotlin
Java
@Configuration
class MyConfiguration {
@Bean
fun beanDecorator(): BeanDecorator {
return BeanDecorator()
}
}
@Configuration
public class MyConfiguration {
@Bean
public BeanDecorator beanDecorator() {
return new BeanDecorator();
}
}
If you need to be able to affect the ShapeShift instance in ways that are not mentioned above, you can implement a
ShapeShiftBuilderCustomizer
, customizers are configuration classes that give you access to the ShapeShiftBuilder
for the main Spring instance of ShapeShift. To use, simply implement the interface and annotate with @Configuration
. In customize
, you can do anything you're normally able to do with the standard ShapeShiftBuilder
Kotlin
Java
@Configuration
class MyCustomizer : ShapeShiftBuilderCustomizer {
override fun customize(builder: ShapeShiftBuilder) {
builder.withDefaultMappingStrategy(MappingStrategy.MAP_ALL)
}
}
@Configuration
public class MyCustomizer implements ShapeShiftBuilderCustomizer {
@Override
public void customize(ShapeShiftBuilder builder) {
builder.withDefaultMappingStrategy(MappingStrategy.MAP_ALL);
}
}
Last modified 7mo ago