2

Jackson ライブラリを使用して Android アプリから Web サーバーに JSON 要求を送信しようとしていますが、応答は常に null です。HttpRequest API だけでテストしたところ、すべて正常に動作しました。応答がありました。しかし、Spring RestTemplate を使用しようとすると、結果を受け取ることができません。これが私のコードです:

protected Void doInBackground(String... params) {
    LinkedHashMap<String, Object> _map = new LinkedHashMap<String, Object>();
    _map.put("login", "Fred");
    _map.put("password", "pass");
    ObjectMapper _mapper = new ObjectMapper ();
    StringWriter _writer = new StringWriter();
    try {
        _mapper.writeValue(_writer,_map);
    } catch (JsonGenerationException e) {
        e.printStackTrace();
    } catch (JsonMappingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    String _baseURL = "https...."//Address of the server;
    HttpHeaders requestHeaders = new HttpHeaders();
    requestHeaders.setContentType(MediaType.APPLICATION_JSON); 
     HttpEntity<String> _entity = new HttpEntity<String>(_writer.toString(),requestHeaders);
    RestTemplate templ = new RestTemplate();

    templ.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
    templ.getMessageConverters().add(new StringHttpMessageConverter());
    ResponseEntity<String> _response = templ.postForEntity(_baseURL, _entity,String.class);
    String _Test =  _response.getBody();

したがって、_Test には常に null があります。これは、https プロトコルが原因であると思われます。RestTemplate は https で動作しますか?

では、そのコードの何が問題なのですか。これを修正する方法は?

前もって感謝します。本当に助けが必要です!

4

2 に答える 2

1

responseType を設定する必要があります。そうしないと、RestTemplate が応答の本文を破棄します。正しいメッセージ コンバーターを見つけるには、responseType が必要です。null の responseType では、下のデリゲートは null になります...

        if (delegate != null) {
            T body = delegate.extractData(response);
            return new ResponseEntity<T>(body, response.getHeaders(), response.getStatusCode());
        }
        else {
            return new ResponseEntity<T>(response.getHeaders(), response.getStatusCode());
        }

RestTemplate のデフォルト コンストラクターを使用すると、Spring には、Rome、JAXB、または Jackson がクラスパス上にあるかどうかに依存する RSS、XML、および JSON を除く、ほぼすべてのコンバーターが含まれます。responseType を String に設定し、デバッガーで実行して、正しいコンバーターが見つからない理由を確認します。サーバーからの応答とヘッダーを確認せずに理由を説明するのは困難です。

于 2012-12-18T17:08:10.333 に答える
0

タイプミスか、https ポートに接続していますか?

String _baseURL = "https...."//サーバーのアドレス。

接続しようとしているポートを監視し、接続が確立されているかどうかを確認する必要があると思います。これを行う簡単な方法の 1 つは、ラップトップをアドホック ネットワークにして Android デバイスを接続することです。そうすれば、Wireshark のようなパケット スニファーを使用して、Android デバイスからのすべてのトラフィックを監視できるはずです。

于 2012-12-18T16:22:31.307 に答える