這節主要介紹下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)