Spring を使用して REST コントローラーを構築しようとしています。読みやすさと統合性を高めるためにデータをフォーマットするために、Mapstruct を使用しました。これがMapperの書き方です。
@Mapper
public abstract class DeviceDataMapper {
@Autowired
DeviceService deviceService;
public static DeviceDataMapper INSTANCE = Mappers.getMapper(DeviceDataMapper.class);
@Mappings({
@Mapping(source = "deviceId", target = "iddevice"),
@Mapping(source = "deviceName", target = "name")
})
public abstract TODevice deviceToTODevice(DeviceData device);
public DeviceData toDeviceToDeviceData(TODevice toDevice){
DeviceData deviceData = new DeviceData();
deviceData.setDeviceId(toDevice.getIddevice());
deviceData.setDeviceName(toDevice.getName());
deviceData.setDeviceTemplateId(toDevice.getDeviceTemplateId());
try {
deviceData.setDeviceTemplateName(deviceService.findDeviceTemplateById(toDevice.getDeviceTemplateId()).getName());
} catch (Exception e) {
e.printStackTrace();
}
return deviceData;
}}
APIコントローラー関数は次のようになります
@RequestMapping(value = "/{deviceId}",method = RequestMethod.GET)
public @ResponseBody DeviceData get(@PathVariable int deviceId) {
DeviceData deviceData=new DeviceData();
try {
deviceData = DeviceDataMapper.INSTANCE.toDeviceToDevice(deviceService.findOne(deviceId));
} catch (Exception e) {
e.printStackTrace();
}
return deviceData;
}
出力 deviceData は、1 つの詳細を除いて正常に返されます。この関数にアクセスできませんでしたdeviceService.findDeviceTemplateById(toDevice.getDeviceTemplateId()
(deviceService は自動配線されています)。エラー スタック トレースに NullPointerException が表示されます。抽象クラスの自動配線されたリソースのアクセシビリティに関する一般的なルールがあるかどうか疑問に思っていますか? または、この関数にアクセスできないようにするインスタンス化の方法はありますか? 機能させるには何を変更すればよいですか?私も同じ結果で@Inject
fromを試しました。javax.inject