ShapeShift
  • Overview
  • Introduction
    • Installation
    • Quick Start
  • API Documentation
    • Annotations
    • Kotlin DSL
    • Java Builder
  • Features
    • Transformers
    • Auto Mapping
    • Conditions
    • Decorators
    • Object Suppliers
    • Mapping Strategy
  • Guides
    • Implicit Transformers
    • Instance Mapping
    • Advanced Mapping
    • Spring Usage
    • Android Usage
Powered by GitBook
On this page
  • Installation
  • Maven
  • Gradle
  • Registering Transformers
  • Annotation Example
  • JavaConfig Example
  • Registering Decorators
  • Annotation Example
  • JavaConfig Example
  • Using Customizers

Was this helpful?

Export as PDF
  1. Guides

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.

Installation

Install the spring library via Maven or Gradle:

Maven

<dependency>
  <groupId>dev.krud</groupId>
  <artifactId>spring-boot-starter-shapeshift</artifactId>
  <version>0.8.0</version>
</dependency>

Gradle

Groovy DSL

implementation 'dev.krud:spring-boot-starter-shapeshift:0.8.0'

Kotlin DSL

implementation("dev.krud:spring-boot-starter-shapeshift:0.8.0")

Registering Transformers

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)

Annotation Example

@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;
    }
}

JavaConfig Example

@Configuration
class MyConfiguration {
    @Bean
    fun beanTransformer(): BeanTransformer {
        return BeanTransformer()
    }
}
@Configuration
public class MyConfiguration {
    @Bean
    public BeanTransformer beanTransformer() {
        return new BeanTransformer();
    }
}

Registering Decorators

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)

Annotation Example

@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
    }
}

JavaConfig Example

@Configuration
class MyConfiguration {
    @Bean
    fun beanDecorator(): BeanDecorator {
        return BeanDecorator()
    }
}
@Configuration
public class MyConfiguration {
    @Bean
    public BeanDecorator beanDecorator() {
        return new BeanDecorator();
    }
}

Using Customizers

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

@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);
    }
}
PreviousAdvanced MappingNextAndroid Usage

Last updated 2 years ago

Was this helpful?

Default transformers cannot be registered in this way, see below on how to achieve this

Using Customizers