kotlin使用mapstruct(四)

這節主要介紹下集成springjava

1.修改上一節中的AppleConverter,給@Mapper添加componentModel字段賦值爲springspring

@Mapper(componentModel = "spring")
abstract class AppleConverter {}

2.這麼easy就能夠使用了app

@RestController
class MyController{

    @Autowired
    lateinit var appleConverter: AppleConverter
    @GetMapping("/hello")
    fun sayHello():String{

        val apple = Apple(1,"my apple",true)
        println(apple)
        val appleDto = appleConverter.convertToDto(apple)
        println(appleDto)
        val appleModel = appleConverter.convertToModel(appleDto)
        println(appleModel)

        return "hello"
    }
}

3.訪問一下輸出,跟咱們期待的效果同樣ide

Apple(appleId=1, appleName=my apple, real=true)
AppleDto(appleId=1, appleName=my apple, description=水果)
Apple(appleId=1, appleName=my apple, real=true)

4.讓咱們看一下mapstruct給咱們生成了什麼code

import javax.annotation.Generated;
import org.springframework.stereotype.Component;

@Generated(
    value = "org.mapstruct.ap.MappingProcessor",
    date = "2018-08-29T10:19:12+0800",
    comments = "version: 1.3.0.Beta1, compiler: javac, environment: Java 1.8.0_172 (Oracle Corporation)"
)
@Component
public class AppleConverterImpl extends AppleConverter {

    @Override
    public AppleDto convertToDto(Apple apple) {
        if ( apple == null ) {
            return null;
        }

        AppleDto appleDto = new AppleDto();

        appleDto.setAppleId( apple.getAppleId() );
        appleDto.setAppleName( apple.getAppleName() );

        afterConvertToDto( apple, appleDto );

        return appleDto;
    }

    @Override
    public Apple convertToModel(AppleDto appleDto) {
        if ( appleDto == null ) {
            return null;
        }

        Apple apple = new Apple();

        apple.setAppleId( appleDto.getAppleId() );
        apple.setAppleName( appleDto.getAppleName() );

        afterConvertToModel( appleDto, apple );

        return apple;
    }
}

咱們能夠看到,生成的代碼加上了Component註解,AppleConverterImpl就成爲受spring管理的bean了,因此咱們能夠在任何地方注入了component

相關文章
相關標籤/搜索