Как отобразить список сущностей в класс сущностей из json, используя DTO и mapStruct - PullRequest
0 голосов
/ 06 апреля 2019

при создании данных с помощью Post in json я получаю список и хочу сопоставить его с классом сущностей с помощью dto и наоборот с помощью mapStruct

@Mapper(componentModel = "spring", imports = [(java.util.UUID::class)])
interface ListInfoMapper {

    @Mappings(
    Mapping(target = "name", expression = "java(info.getAppId())"),
    Mapping(target = "state", expression = "java(info.isEnabled() == true ? \"enabled\" : \"disabled\")")
    )
    @Named("toEntityToDto")
    fun map(info: ListInfo): AppList

    @IterableMapping(qualifiedByName = ["toEntityToDto"])
    fun toAppList(infoList: List<ListInfo>): List<AppList>

    @Mappings(
            Mapping(target = "appList", expression = "java(toAppList(entities))"),
            Mapping(target = "nsId", expression = "java(nsId)")
    )
    fun toDto(nsId: String, entities: List<ListInfo>): ListInfoDto
}

fun ListInfoMapper.convertToListEntity(nsId: UUID, appList: List<AppList>): List<ListInfo> {
    val listInfo = mutableListOf<ListInfo>()
    appList.forEach { it -> listInfo.add(ListInfo(nsId, it.name, (it.state == "enabled"))) }
    return listInfo
}

, когда мы публикуем запрос с помощью post manURL также будет содержать идентификатор.URL-адрес: http://localhost:8080/request/ad3f4tg6-006c-4654-bd13-45f1200a7ee5

my request is:
    {
    "List":
    [{
    "name":"some name",
    "state":"enabled"
    },
    {
    "name":"any name",
    "state":"disabled"
    }
   ]
  }

мой ответ:

{
    "id": "ad3f4tg6-006c-4654-bd13-45f1200a7ee5",
    "appList": [
        {
            "name": "some name",
            "state": "enabled",
            "createdOn": "2019-04-05T06:33:54.095+0000"
        },
        {
            "name": "any name",
            "state": "disabled",
            "createdOn": "2019-04-05T06:33:54.095+0000"
        }
    ] 
}

Мой класс сущностей выглядит так:

    @IdClass(ListInfoIdentity::class)
    @Entity(name = "abc_list")
    data class ListInfo(
        @Id
        var id: UUID,
        @Id
        var listId: String,
        var isEnabled: Boolean,
        var createdOn: Date = Date()
    ) {
        constructor() : this(UUID.randomUUID(), "", false)
    }

    data class ListInfoIdentity(
        var id: UUID = UUID.randomUUID(),
        var listId: String = ""
    ) : Serializable

В сущности listId тоже самоекак name и isEnabled так же, как и состояние.Пожалуйста, предоставьте мне некоторую помощь, как отобразить его с помощью mapstruct.

my Input dto is:
@NoArgsKotlin
data class ListInfoInputDto(
    @get: NotEmpty var appList: List<AppList>
)
@NoArgsKotlin
data class AppList(
    @get: NotBlank var name: String,
    @get: NotBlank var state: String,
    var createdOn: Date = Date()
) {
    constructor(): this("", "", Date())
}

еще один dto:

@NoArgsKotlin
data class ListInfoDto(
    var nsId: String,
    @get: NotEmpty var appList: List<AppList>
) {
    constructor(): this("", mutableListOf(AppList("", "")))
}
...