Spring BootでJSONオブジェクトをレスポンスとして返す 質問する

Spring BootでJSONオブジェクトをレスポンスとして返す 質問する

Spring Boot にサンプルの RestController があります:

@RestController
@RequestMapping("/api")
class MyRestController
{
    @GetMapping(path = "/hello")
    public JSONObject sayHello()
    {
        return new JSONObject("{'aa':'bb'}");
    }
}

JSONライブラリを使用していますorg.json

API を押すと/hello、次のような例外が発生します:

パス [] のコンテキストのサーブレット [dispatcherServlet] の Servlet.service() が例外 [リクエスト処理に失敗しました。ネストされた例外は java.lang.IllegalArgumentException: 戻り値の型に対するコンバーターが見つかりません: クラス org.json.JSONObject] をスローしました。根本的な原因

java.lang.IllegalArgumentException: 戻り値の型に対応するコンバーターが見つかりません: クラス org.json.JSONObject

問題は何ですか? 何が起こっているのか正確に説明してくれる人はいますか?

ベストアンサー1

Spring Boot Web を使用しているため、Jackson の依存関係は暗黙的であり、明示的に定義する必要はありません。Eclipse をpom.xml使用している場合は、依存関係階層タブで Jackson の依存関係を確認できます。

また、 で注釈を付けたので、@RestController明示的な json 変換を行う必要はありません。 POJO を返すだけで、jackson シリアライザーが json への変換を処理します。 これは、@Controller で使用する場合と同じです。すべてのコントローラー メソッドに@ResponseBody配置するのではなく、バニラの代わりに を配置し、デフォルトでそのコントローラーのすべてのリソースに適用されます。@ResponseBody@RestController@Controller@ResponseBody
このリンクを参照してください: https://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-responsebody

あなたが直面している問題は、返されたオブジェクト (JSONObject) に特定のプロパティのゲッターがないことです。また、あなたの意図はこの JSONObject をシリアル化することではなく、POJO をシリアル化することです。したがって、POJO を返すだけです。
このリンクを参照してください: https://stackoverflow.com/a/35822500/5039001

JSON シリアル化された文字列を返す場合は、文字列を返すだけです。この場合、Spring は JSON コンバーターではなく StringHttpMessageConverter を使用します。

おすすめ記事