this Spring-Bootチュートリアルに従って、簡単なREST API
を書いています。私のローカル開発マシン(Ubuntu 15.04
およびWindows 8.1
)では、すべてが魅力のように機能します。
古い32-bit
Ubuntu 12.04 LTS
サーバーがあり、その上にREST
サービスをデプロイしたい。
開始ログは問題ありませんが、GET
リクエストを/user/{id}
エンドポイントに送信するとすぐに、次のエラーが表示されます。
Java.lang.IllegalArgumentException: No converter found for return value of type: class ch.gmazlami.gifty.models.user.User
そして、スタックトレースを下に:
Java.lang.IllegalArgumentException: No converter found for return value of type: class Java.util.LinkedHashMap
スタックトレース全体が投稿されます here 。
私はこのエラーを参照していくつかの答えを調べましたが、Spring-Bootを使用しているので、xml
の設定はまったくないため、それらは私の問題には当てはまらないようです。
影響を受けるコントローラーは次のとおりです。
@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
public ResponseEntity<User> getUser(@PathVariable Long id){
try{
return new ResponseEntity<User>(userService.getUserById(id), HttpStatus.OK);
}catch(NoSuchUserException e){
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
}
どんな助けも大歓迎です。まったく同じことが他のマシンでも完全に機能するため、非常に奇妙です。
pom.xmlおよびmvc-dispatcher-servlet.xmlファイルにいくつかの変更を加える必要があります。pom.xmlに次の依存関係を追加します。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.3</version>
</dependency>
そしてmvc-dispatcher-servlet.xmlを更新します:
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
これは1つのリソース(1つのメソッド)でのみ発生し、その理由はわかりませんでした。同じパッケージ内のクラス内のすべてのメソッド、同じ注釈、同じResponseEntity.ok(...)
などの呼び出しが機能しました。
しかし、これではありません。
POJOクラスでゲッターを生成するのを忘れていたことが判明しました!
それらを追加するとすぐに機能しました。
最終的に誰かの時間を節約できることを願っています...
これは、「ビルド」呼び出しを忘れたときに発生します。
return ResponseEntity.status(HttpStatus.BAD_REQUEST);
する必要があります:
return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
Getters
メソッドとSetters
メソッドを省略したため、この問題に遭遇しました。
私はIntelliJ Ideaとその自動生成されたゲッターとセッターを使用していました。 success
というブール型フィールドがあるため、ゲッターの名前はisSucccess()
でした。名前をgetSuccess()
に変更すると、エラーはなくなりました。