java DTO循环_java – 使用MapStruct进行转换时防止循环引用

今天我开始使用MapStruct为我的项目创建我的Model to DTO转换器,我想知道它是否自动处理循环引用,但事实证明它没有.

这是我测试它的转换器:

package it.cdc.snp.services.rest.giudizio;

import org.mapstruct.Mapper;

import org.mapstruct.Mapping;

import org.mapstruct.Mappings;

import org.mapstruct.factory.Mappers;

import org.springframework.stereotype.Component;

import it.cdc.snp.dto.entita.Avvisinotifica;

import it.cdc.snp.dto.entita.Corrispondenza;

import it.cdc.snp.model.notifica.AvvisoDiNotificaModel;

import it.cdc.snp.model.notifica.NotificaModel;

import it.cdc.snp.model.procedimento.ProcedimentoModel;

@Component

@Mapper(componentModel="spring")

public interface NotificaMapper {

NotificaMapper INSTANCE = Mappers.getMapper( NotificaMapper.class );

@Mappings({

@Mapping(source = "avvisinotificas", target = "avvisinotificas"),

})

NotificaModel corrispondenzaToNotificaModel(Corrispondenza notifica);

@Mappings({

@Mapping(source = "corrispondenza", target = "notifica"),

})

AvvisoDiNotificaModel avvisinotificaToAvvisoDiNotificaModel(Avvisinotifica avvisinotifica);

}

这是测试:

Notifica sourceObject1 = new Notifica();

sourceObject1.setId(new Long(1));

Avvisinotifica sourceObject2 = new Avvisinotifica();

sourceObject2.setId(new Long(11));

List tests= new ArrayList<>();

tests.add(sourceObject2);

sourceObject1.setAvvisinotificas(tests);

sourceObject2.setCorrispondenza(sourceObject1);

NotificaModel destObject1 = new NotificaModel<>();

Avvisinotifica destObject2 = new Avvisinotifica();

NotificaModel converted = mapper.corrispondenzaToNotificaModel(sourceObject1);

Notifica,Avvisinotifica和他们各自的模型都是带有setter和getter的简单POJO所以我认为不需要发布代码(Notifica扩展Corrispondenza,如果你想知道的话)

这段代码进入了一个无限循环,没有什么比这更令人惊讶的了(虽然我希望它能处理这些情况).

虽然我认为我可以找到一种优雅的方式来手动处理它(我正在考虑使用带有@MappingTarget的方法来插入Referenced对象)我想知道是否有某种方法告诉M​​apStruct如何自动处理循环引用.

解决方法:

尚未对MapStruct中的此类案例进行检测或特殊处理,但有一个功能请求:#469.如果您有任何想法如何处理周期,请在该问题上发表评论.

标签:java,mapstruct,cyclic-reference

来源: https://codeday.me/bug/20190717/1488233.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值