0

json オブジェクトを .net Web サービスに投稿しようとしています。

RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new GsonHttpMessageConverter());
answer[] answers = restTemplate.postForObject(url, new Gson().toJson(request), answer[].class);

生成された json は今のところ問題ないようです。

{"request":1234}

しかし、restTemplate の助けを借りて Web サービスに送信されると、http 要求の内容がめちゃくちゃになります。

"{\"request\":1234}"

サービスはエラーコード 400 bad request で応答します

編集:問題が見つかりました

問題は、オブジェクトを 2 回エンコードしたことです。RestTemplate は既にオブジェクトを json にエンコードしています。

作業コードは次のとおりです。

RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new GsonHttpMessageConverter());
answer[] answers = restTemplate.postForObject(url, request, answer[].class);
4

2 に答える 2

1

RestTemplate が既に行っているため、オブジェクトを gson でエンコードする必要はありません

正しいコード:

RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new GsonHttpMessageConverter());
answer[] answers = restTemplate.postForObject(url, request, answer[].class);
于 2012-06-05T18:40:43.307 に答える
1
use this method to post json over the server

public String postData(String url, JSONObject obj) {
        // Create a new HttpClient and Post Header
        String InsertTransactionResult = null;
        HttpClient httpclient = new DefaultHttpClient();
        HttpParams myParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(myParams, 1000);
        HttpConnectionParams.setSoTimeout(myParams, 1000);

        try {

            HttpPost httppost = new HttpPost(url.toString());
            httppost.setHeader("Content-type", "application/json");
            StringEntity se = new StringEntity(obj.toString());
            se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
                    "application/json"));
            httppost.setEntity(se);

            HttpResponse response = httpclient.execute(httppost);
            Result = EntityUtils
                    .toString(response.getEntity());

        } catch (ClientProtocolException e) {

        } catch (IOException e) {
        }
        return Result;
    }
于 2012-06-05T08:07:18.670 に答える