这节主要介绍下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)