web-dev-qa-db-ja.com

Spring Bootアプリケーション:タイプの戻り値のコンバーターが見つかりません

this Spring-Bootチュートリアルに従って、簡単なREST APIを書いています。私のローカル開発マシン(Ubuntu 15.04およびWindows 8.1)では、すべてが魅力のように機能します。

古い32-bitUbuntu 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);
    }
}

どんな助けも大歓迎です。まったく同じことが他のマシンでも完全に機能するため、非常に奇妙です。

15
gmazlami

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>
19
Yahia Ammar

これは1つのリソース(1つのメソッド)でのみ発生し、その理由はわかりませんでした。同じパッケージ内のクラス内のすべてのメソッド、同じ注釈、同じResponseEntity.ok(...)などの呼び出しが機能しました。

しかし、これではありません。

POJOクラスでゲッターを生成するのを忘れていたことが判明しました!

それらを追加するとすぐに機能しました。

最終的に誰かの時間を節約できることを願っています...

22
Pierre Henry

これは、「ビルド」呼び出しを忘れたときに発生します。

return ResponseEntity.status(HttpStatus.BAD_REQUEST);

する必要があります:

return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
6
Kaan Yy

GettersメソッドとSettersメソッドを省略したため、この問題に遭遇しました。

2
shellhub

私はIntelliJ Ideaとその自動生成されたゲッターとセッターを使用していました。 successというブール型フィールドがあるため、ゲッターの名前はisSucccess()でした。名前をgetSuccess()に変更すると、エラーはなくなりました。