1. エラー報告
プロセス: プロジェクトのテスト中に特定の画像リソースを削除すると、エラーが報告されます。
パス [] のコンテキストにあるサーブレット [dispatcherServlet] の Servlet.service() が例外をスローしました
[リクエスト処理が失敗しました。ネストされた例外は java.lang.NullPointerException です] が根本原因です。
2. 分析
よくある問題は、次のような属性の挿入です。
1) Controller クラスの@ResponseBodyは追加されません。
2) マッパーインターフェイスまたはサービスインターフェイスが使用される場合、 @Autowiredが追加されないか、または管理オブジェクトが@Beanを介して送信されません。
3) 一部のメンバー変数はアクティブに新規であり、一部はアノテーションを通じて SpringBoot 管理に送信されます。新しいオブジェクト クラスに他のアノテーション付きオブジェクトが含まれている場合、次のようなエラーも発生します。
サービス:
public class DemoService {
@Autowired
private DemoMapper demoMapper;
public List<Demo> findAll(){
List<Demo> list=DemoMapper.findAll();
System.out.println("demo");
return list;
}
}
コントローラ
@RestController
public class HelloController {
DemoService demoService=new DemoService();
@RequestMapping("findAll")
public List<Demo> findAll(){
return DemoService.findAll();
}
}
新しいクラスがオブジェクトを送信するためにアノテーションを使用するクラスである場合、エラーが報告されます。
これらの一般的な理由は、コメントを追加する必要がある限り、簡単に解決できます。
4) エラー通過
しかし、プロジェクトにアノテーションの問題以外のエラー レポートがあるので、Lombok ログ出力とエラー レポートを確認してください。
出力は常に正常です。最後のクエリは結果の数が 0、つまり合計: 0 であり、後でエラーが報告されます。ネストされた例外は null ポインタ例外です。値が NULL である必要があります。エラーレポートによると、対応するクラスとメソッドが見つかりました。
論理的には、i ExhibitionImgMapper.get ExhibitionImg は ExhibitionImgVO エンティティ クラス オブジェクトを返しますが、ログには、返された ExhibitionImgVO の数が 0、つまり NULL であることが示されています。エンティティ クラスのメソッド getImgurl() を呼び出すために NULL 値が見つかった場合、 getImgurl() の場合、オブジェクトがアノテーションを通じて送信されていないかどうかを示す Null 値であるため、SpringBoot は ExhibitionImgVO オブジェクトを見つけることができません。確かに問題はそこにあるので、間違いを修正してください。
3.解決する
ExhibitImgVO exhibitImgVO =iExhibitImgMapper.getExhibitImg(tableName,id);
BeanUtils.copyProperties(exhibitPrefVOList.get(i),exhibitPrefTotalVO);
if (exhibitImgVO==null){
exhibitPrefTotalVO.setFirstImgUrl(null);
}else {
exhibitPrefTotalVO.setFirstImgUrl(exhibitImgVO.getImgurl());
}
exhibitPrefTotalVOList.add(i,exhibitPrefTotalVO);
オブジェクトがNullであるためにエンティティクラスのメソッドが呼び出されたときにエラーが報告されるのを避けるために、exhibitImgVOがNULLでない場合にのみ、exhibitImgVO.getImgurl()を実行するという条件判断を行いました。
誰もが同じ状況とは限りませんが、私の間違いを正した経験が参考になれば幸いです。