0

私の ajax 応答では、JSON の結果を返したいと思っています。

私はSpring MVCを使用していますが、すでにpom.xmlにjacksonが含まれています。

今私のコントローラーのアクションで私は持っています:

  @ResponseBody
    @RequestMapping(value = "/someAjaxResponse", method = RequestMethod.POST)
    public String someAjaxResponse(HttpServletRequest request, HttpServletResponse response) {

    }

組み込みのJavaデータ構造/タイプを使用して、jacksonを使用してjsonに変換できるようにすることをお勧めしますか?

応答タイプごとに新しいクラスを作成したくないので、この目的に適した汎用 Java タイプを探しています。

提案?

json に変換する場合、jackson には ObjectMapper のようにオブジェクトを変換する複数の方法があることを知っているので、どの方法が最適でしょうか? それは私がそれを最終的なものとしてマークすることを意味しますか?

4

1 に答える 1

2

答えは、ユースケースによって異なります。私の提案は、ニーズにぴったり合うカスタム値オブジェクトを作成し、それを返し、Jackson にシリアル化を処理させることです。

@ResponseBody
@RequestMapping(value = "/someAjaxResponse", method = RequestMethod.POST)
public CustomValueObject someAjaxResponse(HttpServletRequest request, HttpServletResponse response) {

}

<mvc:annotation-driven />またはをアプリケーション コンテキストに追加し、Jackson の依存関係をクラスパスに追加するだけで、アノテーション@EnableWebMvcを使用するため、オブジェクトは自動的に JSON にシリアル化されます。@ResponseBody

詳細についてはMappingJacksonHttpMessageConverter、Spring リファレンス マニュアルを参照してください。

返されるオブジェクトは複雑な構造を持つ場合があることに注意してください。個人データをクライアントに提供したい場合Person、コントローラー メソッドからオブジェクトを返すことができます。

public class Person {
    public String getFirstName() {...}
    public int getAge() {...}
    List<String> getEmailAddresses() {...}
    Address getAddress() {...}
}

public class Address {
    public String getStreet() {...}
    public int getHouseNumber() {...}
    public String getCity() {...}
    public int getZIP() {...}
    public String getState() {...}
}

次のようにシリアル化できます。

{
    "firstName": "John",
    "lastName": "Doe",
    "age": 42,
    "emailAddresses": [
        "john@doe.com",
        "john.doe@somewhere.com"
    ],
    "address": {
        "street": "First Avenue",
        "houseNumber": 123,
        "city": "Smallville",
        "ZIP": 12345,
        "state": "CA"
    }
}
于 2012-10-20T16:45:15.570 に答える