どうも新米エンジニアのnoyです。
ServletとAjaxを使って非同期通信できるwebアプリを作っているのですが、
エラー解決に少々時間がかかったので記録を残します。
開発環境
エディター:Eclipse 2019-03 (4.11.0)
Webサーバー:Apache Tomcat v9.0
言語:Java
ライブラリ:
・jquery-3.4.1.min.js
・jackson-annotations-2.9.9.jar
・jackson-core-2.9.9.jar
・jackson-databind-2.9.9.jar
エラー内容
Servletからajaxにレスポンスを返そうとしたところ、HTTPステータス 500 – Internal Server Errorが発生

「500エラーってなに?!」となり、わんやわんやと少々時間を潰してしまいましたが、

あれ?ObjectMapperを定義しているファイルはimportしてるはずなんだけど....
そう思いながらEclipseを色々見直してると「問題」タブで以下の警告を発見。

あれ、クラスパスに追加してるはずのjackson-XXXXXX-2.9.9.jarファイルが参照されてないのかも...?
原因
ObjectMapper(Jacksonのクラス)が定義されているファイル(jackson-XXXXXX-2.9.9.jar)を参照することができず、java.lang.NoClassDefFoundErrorとなっているため。
※ Jacksonとは…Java用のJSONパーサーライブラリの1つ。JavaオブジェクトとJSONの相互変換ができる。
ということで「eclipse クラスパス・エントリー は、エクスポートまたは公開されません。」でググってみたところ、以下のページを見て解決できました。
https://codeday.me/jp/qa/20190201/208565.html
「spring-mvc – Eclipseの警告:XXXXXXXXXXX.jarはエクスポートまたは公開されません。ランタイムClassNotFoundExceptionsが発生する可能性があります」
解決策
jackson-XXXXXX-2.9.9.jarファイルを参照ライブラリーから削除し、WEB-INF / libフォルダに直接格納する。


参照ライブラリーにある、3つのjackson-XXXXXX-2.9.9.jarファイルを「ビルド・パスから除外」で削除。

WebContent/WEB-INF/libフォルダに3つのjackson-XXXXXX-2.9.9.jarファイルを直接ドラッグ&ドロップ。

「ファイルをコピー」を選択して「OK」

ファイルが格納されました。

3つのjackson-XXXXXX-2.9.9.jarファイルに関する警告が消えています。(今は残り2項目については無視)

500エラーも消えてServletが実行できました。