2013-09-24 12 views
5

Webアプリケーションにマップを渡す必要があります。JSONObject SpringとJacksonの代わりに

私はJSONObject

http://json.org/java/

でマップをカプセル化するために使用されるが、私は春とジャクソンハウスを使用しておりますので。

pojoを維持する簡単な方法はありますか? MAPに注釈を付けることはできますか?

+1

あなたのプロジェクトであなたはジャックソンを利用できるようになりました。そして@ResponseBodyアノテーションを使ってコントローラーからマップを返すと、スプリングコンバーターによって自動的にjsonオブジェクトに変換されます –

+0

私はマップをPOJOはmodel.addAttribute( "pojo"、pojo) – user4127

答えて

2

あなたはすなわち、出力を操作する必要がある場合は、あなたがJSonArrayを使用することができ、オブジェクトのすべてのフィールドを提供したくない:

@RequestMapping(value = "/api/users", method = RequestMethod.GET) 
public 
@ResponseBody 
String listUsersJson(ModelMap model) throws JSONException { 
    JSONArray userArray = new JSONArray(); 
    for (User user : userRepository.findAll()) { 
     JSONObject userJSON = new JSONObject(); 
     userJSON.put("id", user.getId()); 
     userJSON.put("firstName", user.getFirstName()); 
     userJSON.put("lastName", user.getLastName()); 
     userJSON.put("email", user.getEmail()); 
     userArray.put(userJSON); 
    } 
    return userArray.toString(); 
} 

here

からの例を使用してそれ以外の場合依存関係にjacksonを追加し、コントローラメソッドを@ResponseBodyでアノテーションを設定すると、レスポンスは自動的にJSONにマップされます。簡単な例については、hereを参照してください。

+0

を使用していますが、送信依頼(実際の言葉は分かりません)の場合は別のページに転送されません。 – user4127

5

ジャクソンはcom.fasterxml.jackson.core.JsonNodeであり、具体的なサブタイプはObjectNodeである。 これらのフォームはいわゆるTree Modelと呼ばれ、ジャクソンでJSONを処理する3つの方法のうちの1つで、他のいくつかのライブラリ(org.jsonなど)はこの方法のみを提供します。

代わりに代わりにJsonNodeを使用できるはずです。ライブラリを使用している場合は少しの点があります。org.jsonそれは遅く、古くなったAPIを持っています。

また、java.util.Mapを使用して、それを返すこともできます。 Jacksonは標準List s、Mapsおよびその他のJDKタイプを正常に処理できます。

+0

私はマップを使用しましたが、オブジェクトの戻り値はJSONオブジェクトではありません。 – user4127

関連する問題