4

私は応答として使用Spring MVCして返しています。任意の TYPE を入力できる一般的な応答JSONを作成し、応答を次のようにしたいと考えています。JSON

{
    status : "success",
    data : {
        "accounts" : [
            { "id" : 1, "title" : "saving", "sortcode" : "121212" },
            { "id" : 2, "title" : "current", "sortcode" : "445566" },
        ]
     }
}

だから私はResponse<T>オブジェクトを作成しました

public class Response<T> {

    private String status;
    private String message;
    T data;
...
...
}
  1. これはこれを行う正しい方法ですか、それともより良い方法はありますか?
  2. Springコントローラーでこの Response オブジェクトを使用して、空の応答オブジェクトおよび/または入力された応答オブジェクトを返すにはどうすればよいですか。

よろしくお願いします。

アップデート:

説明したものと同様のJSON出力を取得するために、つまり の「アカウント」キーを使用して、コントローラーで次JSONを使用する必要がありました。Response<Map<String, List<Account>>>

@RequestMapping(value = {"/accounts"}, method = RequestMethod.POST, produces = "application/json", headers = "Accept=application/json")
    @ResponseBody
    public Response<Map<String, List<Account>>> findAccounts(@RequestBody AccountsSearchRequest request) {
        //
        // empty accounts list
        //
        List<Account> accountsList = new ArrayList<Account>();

        //
        // response will hold a MAP with key="accounts" value="List<Account>
        //
        Response<Map<String, List<Account>>> response = ResponseUtil.createResponseWithData("accounts", accountsList);

        try {
            accountsList = searchService.findAccounts(request);

            response = ResponseUtil.createResponseWithData("accounts", accountsList);
            response.setStatus("success");
            response.setMessage("Number of accounts ("+accounts.size()+")");
        } catch (Exception e) {
            response.setStatus("error");
            response.setMessage("System error " + e.getMessage());
            response.setData(null);
        }

        return response;
    }

これはこれを行う正しい方法ですか?つまり、出力で「アカウント」キーを取得するにはJSON

4

1 に答える 1

2

JSON の例は有効ではありませんが (status引用data符で囲まれていません)、このアプローチは機能します。

クラスパスに Jackson jar があることを確認する必要があり、Spring が残りを処理します。

これを機能させるには、次のような応答クラスのコンストラクターを作成します。

public class Response<T> {

    private String status;
    private String message;
    private T data;

    public Response(String status, String message, T data) {
        this.status = status;
        this.message = message;
        this.data = data;
    }

    //...getter methods here

}

そして、Spring コントローラーで、マッピングされたメソッドからこのオブジェクトを返すだけです@RequestMapping

@Controller
public class MyController {
    @RequestMapping(value="/mypath", produces="application/json")
    public Response<SomeObject> myPathMethod() {
        return new Response<SomeObject>("200", "success!", new SomeObject());
    }
}
于 2013-06-30T00:27:37.250 に答える