Springの@ResponseBodyでオブジェクトをJSONに変換する。

spring

Springを使ったWebAPIの返却値をオブジェクトからJSON(String)へ変換する方法を紹介します。

@ResponseBodyを使う以外でもオブジェクトをJSONへ変換することもできるので、今回は両方紹介していきます。
記事の最後に@ResponseBodyを使う際の注意についてもふれています。

[スポンサーリンク]

@ResponseBodyの使い方

コントローラクラスのメソッド先頭へ@ResponseBodyをつけるただけでOKです。
これだけでオブジェクトResultSampleがJSONフォーマットの文字列で返却されます。

@RequestMapping("/api")
@ResponseBody
public ResultSample test() {
    ResultSample result = new ResultSample(100,"test222");
    return result;
}

@RestControllerを使う方法

@ResponseBodyの代わりにコントローラクラス先頭へ@RestControllerをつけることによって、同じようにオブジェクトからJSONフォーマットへ変換してくます。
こちらの方法だと、メソッド単位にアノテーションを入れなくてすみます。

@RestController
public class AppRestController {

    @RequestMapping("/json")
    public ResultSample index() {
        ResultSample result = new ResultSample(1,"test");
        return result;
    }
}

気をつける点

リターンオブジェクトにsetter, getterがないと406エラーが発生してしまいます。
こちらは@ResponseBodyも@RestControllerも同じですので、必ずリターンオブジェクトにはsetter, getterを入れるように気をつけましょう。

>実行結果
There was an unexpected error (type=Not Acceptable, status=406).

springとjavaのバージョン

springのバージョンは、4.2.0を使っています。
javaは、version 8です。

さいごに

@ResponseBodyも@RestControllerも今ではすっかりお馴染みとなりましたが、アノテーション一つでオブジェクトをJSON形式の文字列に変換してくれるなんて、当時は結構おどろいたものです。

実は最近406エラーに遭遇したのでこちら記事にしました。

それでは!