我正在开发一个Spring启动应用程序,我有以下疑问。
我有一个服务方法(工作正常),它将一个对象插入数据库,调用存储库:
@Override
@Transactional
public CoinDTO createCoin(CoinDTO coin) throws DuplicateException {
Coin checkCoinExists = coinRepository.findByCode(coin.getCode());
if (checkCoinExists != null) {
String MsgErr = String.format("Coin %s already registered in the system !!! "
+ "Impossible to use POST", coin.getCode());
log.warning(MsgErr);
throw new DuplicateException(MsgErr);
}
Coin result = coinRepository.save(conversionService.convert(coin,Coin.class));
return conversionService.convert(result,CoinDTO.class);
}
如您所见,save()methjod返回插入的Coin对象(即映射我的表的Hibernate实体类)。服务方法将此Coin对象转换为CoinDTO对象,以便返回DTO对象而不是实体实例。它工作正常,这是预期的行为。
现在我创建了第二个服务方法,它只是检索所有Coin对象的列表,并且必须返回相关CoinDTO对象的列表:
@Override
public List<CoinDTO> getCoinList() {
List<Coin> coinsList = this.coinRepository.findAll();
return null;
}
在这里,我有以下疑问:我认为我可以实现thid ENTITY到DTO转换行为,在coinsList元素上迭代,逐个转换列表中的每个元素,然后将其添加到一个新的列表中。它应该能行
有没有更现代、更聪明的方法?也许使用lambda函数?你能帮助我以一种现代而聪明的方式实施这种行为吗?
据我所知,您正在寻找一种使转换过程更短、更方便的方法。如果在本例中使用ModelMapper类,请阅读以下内容http://modelmapper.org/在文档中,ModelMapper使用TypeToken来允许映射泛型参数化类型。
您可以创建一个通用抽象类,如下所示:
public abstract class AbstractConverter<T, DTO> {
public abstract T fromDto(DTO dto);
public abstract DTO toDTO(T t);
public List<T> fromDTOs(List<DTO> dtos) {
if (dtos == null || dtos.isEmpty()) {
return null;
} else {
return dtos.stream().map(this::fromDTO).collect(Collectors.toList());
}
}
public List<DTO> toDTOs(List<T> ts) {
if (ts == null || ts.isEmpty()) {
return null;
} else {
return ts.stream().map(this::toDTO).collect(Collectors.toList());
}
}
}
然后创建另一个类,通过像这样分配你想要的值来实现一个重新创建的抽象类:
@Component(value = "coinConverter")
public class CoinConverter extends AbstractConverter<Coin, CoinDTO> {
@Override
public Coin fromDTO(CoinDTO dto) {
if (dto == null) {
return null;
} else {
Coin coin = new Coin();
// Assign all values you wanted to consume
// of the following form
// coin.setYourAttribite(dto.getYourAttribute())
return coin;
}
}
@Override
public CoinDTO toDTO(Coin coin) {
if (t == null) {
return null;
} else {
CoinDTO coinDTO = new CoinDTO();
// Assign all values you wanted to expose
// of the following form
// coinDTO.setYourAttribite(coin.getYourAttribute())
return coinDTO;
}
}
}
在控制器层中,您可以通过以下方式更改现有代码:
@Autowired
@Qualifier("coinConverter")
AbstractConverter<Coin, CoinDTO> abstractConverter;
@Override
public List<CoinDTO> getCoinList() {
List<Coin> coinsList = this.coinRepository.findAll();
return abstractConverter.toDTOs(cointList);
}
这样,您的代码可以灵活地添加更多转换器,而无需更改现有转换器。
问题内容: 我正在使用Spring MVC框架编写简单的博客Web应用程序。我愿意为我的应用添加图层。 我决定使用ModelMapper框架从对象转换为视图中使用的对象。 我只有一个问题。在我的主页上,我正在显示博客中的帖子列表。在我看来,这只是(实体)对象的列表。我想更改它以将对象列表传递给我的视图。有没有什么办法来映射的对象的单方法调用的对象?我当时在考虑编写将对此进行转换的转换器,但是我不确
问题内容: 我想使用Java 8技巧在一行中执行以下操作。 给定此对象定义: 和a ,我想得到a ,它是第一个列表中所有s对象的列表- 顺序相同。 我可以使用Java中的循环来做到这一点,但我相信Java8中应该有一个单行lambda可以做到这一点。我无法在线找到解决方案。也许我没有使用正确的搜索词。 有人可以为这种转换建议一个lambda或另一种线吗? 问题答案: 这应该可以解决问题: 也就是说
我可以在Java中使用循环来实现这一点,但我认为在Java8中应该有一个一行程序lambda来实现这一点。我无法在网上找到解决方案。也许我没有使用正确的搜索词。 有人能为这个转换提出一个lambda或另一个一行程序吗?
我有一个DTO列表,我需要将这个DTO映射到两个不同的实体对象列表。我不熟悉Java和Springboot。我找到了两个DTO映射到一个实体对象的示例。例如http://modelmapper.org/getting-started/ 个人实体- 地址实体- DTO: 我需要将上面的DTO列表映射到下面的实体对象列表: 我如何映射一个列表的人的DTO到列表的人和列表的地址?
问题内容: 我有一个代表列表的字符串: 我想把那些乱七八糟的字符串变成一个实际的清单。我想可以将数字进行正则表达式并循环到(),但是有没有更简单的方法?不知道如何将其设置为正则表达式。 问题答案: 使用ast.literal_eval。
问题内容: 我有SourceObjects列表,我需要将其转换为ResultObjects列表。 我可以使用ResultObject的方法将一个对象获取到另一个对象: 我当然可以这样: 但对于能够展示如何使用 rxJava 进行相同操作的人,我将非常感激。 问题答案: 如果发出,则可以使用以下运算符: (将您的列表转换为可观察项) (将您的商品转换为其他商品) 运算符(将完成的Observable