kotlin使用mapstruct(五)

这节主要介绍下qualifiedByName

下面的示例主要演示了不同类型如何自定义映射

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如何进行互相映射,下面我们来调用一下吧

    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)

输出

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)

转载于:https://my.oschina.net/weidedong/blog/2052344

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值