Spring中Page<Stock>转Page<StockDto>编译报错,如何修正?
解决Page转Page的编译错误
编译报错的核心原因是:Page接口的map方法需要的是java.util.function.Function类型参数,但你传入的是Spring的org.springframework.core.convert.converter.Converter,两者属于不同的函数式接口,编译器无法自动适配。
以下是三种可行的修正方案:
方案一:使用Lambda表达式(最简洁)
直接用Lambda实现Function的逻辑,无需额外接口:
public Page<StockDto> getAllStocksPageable(int pageNumber, int pageSize) { Pageable pageable = PageRequest.of(pageNumber, pageSize); Page<Stock> stocks = stockRepository.findAll(pageable); Page<StockDto> dtoPage = stocks.map(stock -> { StockDto stockDto = new StockDto(); // 填充Stock到StockDto的字段映射逻辑 // 示例:stockDto.setStockCode(stock.getStockCode()); return stockDto; }); return dtoPage; // 注意:原代码返回null是错误的,需返回转换后的结果 }
方案二:显式创建Function匿名类
如果不习惯Lambda,可显式实现Function接口:
import java.util.function.Function; // ... public Page<StockDto> getAllStocksPageable(int pageNumber, int pageSize) { Pageable pageable = PageRequest.of(pageNumber, pageSize); Page<Stock> stocks = stockRepository.findAll(pageable); Page<StockDto> dtoPage = stocks.map(new Function<Stock, StockDto>() { @Override public StockDto apply(Stock stock) { StockDto stockDto = new StockDto(); // 字段映射逻辑 return stockDto; } }); return dtoPage; }
方案三:复用已有的Spring Converter
如果已经定义了Converter<Stock, StockDto>的Bean,可通过方法引用转换为Function:
import org.springframework.core.convert.converter.Converter; import org.springframework.beans.factory.annotation.Autowired; // ... @Autowired private Converter<Stock, StockDto> stockConverter; public Page<StockDto> getAllStocksPageable(int pageNumber, int pageSize) { Pageable pageable = PageRequest.of(pageNumber, pageSize); Page<Stock> stocks = stockRepository.findAll(pageable); Page<StockDto> dtoPage = stocks.map(stockConverter::convert); return dtoPage; }
内容的提问来源于stack exchange,提问作者user2023141
相关产品推荐
相关产品推荐

