kotlin使用mapstruct(五)

這節主要介紹下qualifiedByNamejava

下面的示例主要演示了不一樣類型如何自定義映射app

package com.example.demo1

import java.time.LocalDateTime

data class Apple(var appleId:Int, var appleName:String,var real:Boolean,var produceTime:LocalDateTime){
    constructor():this(0,"",false, LocalDateTime.now())
}

package com.example.demo1

data class AppleDto(var appleId:Int, var appleName:String,var description:String,var timeStmp:Long){
    constructor():this(0,"","",0)
}

package com.example.demo1

import org.mapstruct.*
import java.time.LocalDateTime
import java.time.ZoneId
import java.time.ZoneOffset
import java.util.*


@Mapper
abstract class AppleConverter {

    @Mappings(value = [
        Mapping(target = "description",ignore = true),
    Mapping(source = "produceTime",target = "timeStmp",qualifiedByName = ["getTimeStamp"])])
    abstract fun convertToDto(apple: Apple) : AppleDto
    @Mappings(value = [
        Mapping(target = "real",ignore = true),
        Mapping(source = "timeStmp",target = "produceTime",qualifiedByName = ["getLocalDateTime"])])

    abstract fun convertToModel(appleDto: AppleDto) : Apple

    @AfterMapping
    protected fun afterConvertToDto(apple: Apple, @MappingTarget appleDto: AppleDto) {
        val description = if(apple.real) "水果" else "數碼"
        appleDto.description = description
    }
    @AfterMapping
    protected fun afterConvertToModel(appleDto: AppleDto, @MappingTarget apple: Apple) {
        val real = if(appleDto.description == "水果") true else false
        apple.real = real
    }

    @Named("getTimeStamp")
    fun getTimeStamp(produceTime:LocalDateTime):Long{
      return  produceTime.toInstant(ZoneOffset.of("+8")).toEpochMilli()
    }
    @Named("getLocalDateTime")
    protected fun getLocalDateTime(timeStamp:Long):LocalDateTime{
      return  LocalDateTime.ofInstant( Date(timeStamp).toInstant(), ZoneId.of("Asia/Shanghai"))
    }
    //
}

上面的示例能夠看到produceTime與timeStmp如何進行互相映射,下面咱們來調用一下吧this

val appleConverter = Mappers.getMapper(AppleConverter::class.java)
    val apple = Apple(1,"my apple",true, LocalDateTime.now())
    println(apple)
    val appleDto = appleConverter.convertToDto(apple)
    println(appleDto)
    val appleModel = appleConverter.convertToModel(appleDto)
    println(appleModel)

輸出code

Apple(appleId=1, appleName=my apple, real=true, produceTime=2018-09-17T13:57:16.342)
AppleDto(appleId=1, appleName=my apple, description=水果, timeStmp=1537163836342)
Apple(appleId=1, appleName=my apple, real=true, produceTime=2018-09-17T13:57:16.342)
相關文章
相關標籤/搜索