0

I use kotlin/springboot and I want to use ModelMapper to map to Data Classes. I want to map Account:balance:Amount:Int to AccountDto:balance:Float

From :

data class Account(
        val id: String,
        var balance: Amount
)

data class Amount(var value: Int)

To :

data class AccountDto(
        var id: String,
        var balance: Float?)

I tried this :

val modelMapper = ModelMapper()

modelMapper.addMappings(object : PropertyMap<Account, AccountDto>() {
    override fun configure() {
        map(source.balance.value / 100f, destination.balance)
    }
})

but I have error like that :

Caused by: org.modelmapper.ConfigurationException: ModelMapper configuration errors:

1) Cannot map final type ....accounts.Account.

2) Cannot map final method ....accounts.Account.getBalance().

3) Cannot map final type ....accounts.Amount.

4) Cannot map final method ....accounts.Amount.getValue().

5) Cannot map final type ....account.dto.AccountDto.

6) Cannot map final method ....account.dto.AccountDto.getBalance().

I have no more idea right now.

Julien
  • 1
  • 1
  • 1
  • 2
  • 1
    Check out this post: https://stackoverflow.com/questions/39199426/better-way-to-map-kotlin-data-objects-to-data-objects – Daniel Jacob Aug 26 '20 at 05:50

2 Answers2

0

Change val to var

data class Account(
        val id: String,
        var balance: Amount
)

0

First, You must make your DTO variables nullable.

Use apply{} extension function to do all conversions you need, check the code below

data class AccountDTO(
    var id: String? = null,
    var balance: Float? = null,
){
    companion object{
        fun fromEntity(account: Account): AccountDTO = ModelMapper().map(account, AccountDTO::class.java)
            .apply {
            balance = account.balance.value.toFloat()
        }
    }
}