1

私はスプリングコントローラーを持っています:

@RequestMapping(value = "/add", method = RequestMethod.POST, 
     consumes = "application/json")
public @ResponseBody ResponseDto<Job> add(User user) {
    ...
}

APACHE HTTP CLIENT を使用して、次のようにオブジェクトを POST できます。

HttpPost post = new HttpPost(url);
List nameValuePairs = new ArrayList();
nameValuePairs.add(new BasicNameValuePair("name", "xxx"));
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = client.execute(post);

コントローラーで、「xxx」という名前のユーザーを取得します

User オブジェクトを作成してサーバーに投稿したいので、次のように GSON オブジェクトを使用してみました。

User user = new User();
user.setName("yyy");

Gson gson = new Gson();
String json = gson.toJson(user);

HttpClient client = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
StringEntity entity = new StringEntity(json.toString(), HTTP.UTF_8);
entity.setContentType("application/json");
httpPost.setEntity(entity);
HttpResponse response = client.execute(httpPost);

しかし、このようにして、nullフィールドを持つサーバー User オブジェクトに入ります...

どうすれば解決できますか?

4

2 に答える 2

3

あなたが欠けているいくつかのことをOK:

  1. Userクライアントとサーバーで同じ方法で json にシリアライズおよびデシリアライズしていることを確認してください。
  2. spring 組み込みの jackson サポートを使用する場合 (およびできればクライアントでも使用する場合)、またはHttpMessageConverterGson に適切なものを含める場合は、クラスパスに jackson ライブラリがあることを確認してください。そのために、spring-android のGsonHttpMessageConverterを使用できます。
  3. リクエスト ハンドラー メソッドのパラメーターに で注釈を付けます@RequestBody
  4. @ararogが述べたように、jacksonを使用する場合は、無視できるフィールドを明確に除外するか、Userクラス全体に注釈を付けてください。@JsonIgnoreProperties(ignoreUnknown = true)
于 2013-04-07T12:38:53.207 に答える