Spring中将对象列表转为DTO列表报错:非静态方法无法从静态上下文引用
解决Non-static method cannot be referenced from a static context错误
错误原因
你在RaceService的getRaces方法中使用了RaceDtoMapper::map的方法引用,但RaceDtoMapper类中的map是非静态方法,不能直接通过类名调用,必须通过类的实例来执行。
解决方案
方案一(推荐):使用注入的实例方法引用
既然RaceDtoMapper已经通过构造函数注入到RaceService中,直接使用该实例的方法引用即可:
List<RaceDto> getRaces(){ return raceRepository.findAll() .stream() .map(raceDtoMapper::map) // 替换为注入的实例引用 .toList(); }
这种方式符合Spring依赖注入的设计规范,后续如果RaceDtoMapper需要注入其他依赖,也能正常工作。
方案二:将map方法改为静态方法
如果不需要RaceDtoMapper作为Spring管理的Bean,可以把map方法改为静态方法:
@Service public class RaceDtoMapper { public static RaceDto map(Race race){ // 添加static修饰符 RaceDto dto = new RaceDto(); dto.setId(race.getId()); dto.setMaxPlayers(race.getMaxPlayers()); dto.setDescription(race.getDescription()); dto.setLocation(race.getLocation()); dto.setDate(race.getDate()); dto.setState(race.getState()); dto.setRaceEventId(race.getRaceEvent().getId()); return dto; } }
但不推荐这种方式,因为RaceDtoMapper被标记为@Service,本身是要被Spring管理的实例Bean,静态方法会破坏这种设计。
内容的提问来源于stack exchange,提问作者Ser
相关产品推荐
相关产品推荐

