You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:27:25