このコードで
@RequestMapping(value = "/bar/foo", method = RequestMethod.GET)
public ResponseEntity<foo> foo() {
Foo model;
...
return ResponseEntity.ok(model);
}
}
次の例外が発生します
Java.lang.IllegalArgumentException: No converter found for return value of type
私の推測では、Jacksonが欠落しているため、オブジェクトをJSONに変換できません。ジャクソンはスプリングブーツに組み込まれていると思ったので、なぜかわかりません。
次に、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>
これを機能させるには、スプリングブートプロパティを変更する必要がありますか?
ありがとうございました
問題は、Fooのネストされたオブジェクトの1つにgetter/setter
がなかったことです。
以下の依存関係をpom.xmlに追加します。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.1</version>
</dependency>
エラーメッセージに記載されているBean内にないゲッター/セッターを追加します。
@ResponseBody
およびgetter/setter
を使用します。それがあなたの問題を解決することを願っています。
@RequestMapping(value = "/bar/foo", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<foo> foo() {
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>
私はまったく同じ問題を抱えていましたが、残念ながらゲッターメソッドを追加したり、ジャクソンの依存関係を追加したりしても解決できませんでした。
次に、オフィシャルスプリングガイドを見て、ここに記載されている例に従いました- https://spring.io/guides/gs/actuator-service/ JSON形式に。
次に、自分のプロジェクトを再度作成しましたが、今回は依存関係も追加し、pom.xmlファイルに存在するプラグインを作成します上記の公式Spring Guideの例。
変更された依存関係とXMLファイルのビルド部分は次のようになります!
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
上記のリンクでも同じことがわかります。
そして魔法のように、少なくとも私にとっては、うまくいきます。そのため、すでに他のオプションを使い果たしている場合は、私と同じように、これを試してみてください
補足として、以前のプロジェクトに依存関係を追加し、Mavenでプロジェクトのインストールと更新を行ったとき、それは機能しませんでした。そのため、プロジェクトを最初からやり直す必要がありました。私のプロジェクトはサンプルプロジェクトであるため、あまり気にしませんでしたが、それも探してみてください。
この問題は、私の場合、スプリングフレームワークがネストされたオブジェクトのプロパティを取得できなかったために発生しました。ゲッター/セッターは解決の1つの方法です。プロパティを公開することは、これが本当に問題であるかどうかを検証するもう1つの迅速で汚い解決策です。
私は長い間同じ問題に直面していましたが、オブジェクトマッパーを使用してオブジェクトをJSONに変換し、JSON Object
@RequestMapping(value = "/getTags", method = RequestMethod.GET)
public @ResponseBody String getTags(@RequestParam String tagName) throws
JsonGenerationException, JsonMappingException, IOException {
List<Tag> result = new ArrayList<Tag>();
for (Tag tag : data) {
if (tag.getTagName().contains(tagName)) {
result.add(tag);
}
}
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(result);
return json;
}
私の場合、ライブラリjackson-core.jarを追加するのを忘れていました。jackson-annotations.jarとjackson-databind.jarのみを追加しました。 jackson-core.jarを追加すると、問題が修正されました。
また、クラス内の異なるプロパティに2つの@JsonProperty( "some_value")同一行を誤って配置した場合にも、このようなエラーが発生しました。
構成クラスの@EnableWebMvc注釈は、私の問題を解決しました。 (Spring 5、web.xmlなし、AbstractAnnotationConfigDispatcherServletInitializerによって初期化)
しばらくの間、同じエラーが発生していました。すべてのプロパティでゲッターメソッドが使用可能であることを確認しましたが、それでも同じエラーが発生していました。問題を解決するにはMVC xml(configuration)を設定します
<mvc:annotation-driven/>
これは、Springがジャクソンの存在を検出し、対応するコンバーターをセットアップするために必要です。