0

GEThttpリクエストにSpringを使用しようとしています。

私のメインクラス:

    final String url = getString(R.string.myurl);

        // Populate the HTTP Basic Authentitcation header with the username and password
        String Usn = "username";
        String ww = "password";

        HttpAuthentication authHeader = new HttpBasicAuthentication(Usn, ww);
        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.setAuthorization(authHeader);
        requestHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));

        System.out.println("Headers: " + requestHeaders.toString());

        // Create a new RestTemplate instance
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());


        try {
            // Make the network request
            Log.d(TAG, url);
            ResponseEntity<CatMessage> response = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<Object>(requestHeaders), CatMessage.class);
            System.out.println(response.toString());
        } catch (HttpClientErrorException e) {
            Log.e(TAG, e.getLocalizedMessage(), e);
        }
    }

CatMessageクラスの場合:

public class CatMessage {

    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }

    public String message;
    public int code;

}

ユーザー名とパスワードの組み合わせが機能していない(そしてこのサーバー部分は正常に機能している)ので、私が取り戻す必要があるのは次のとおりです。

{{

"message": "You are not authorized to use this service",
"code": 5201

}

Spring for Androidの基本認証プロジェクトをほぼコピーしているので、これでうまくいくと思いました

しかし、何が起こるかは構文解析の問題です(私は思います)。もちろん、JacksonとSpringの依存関係を含めたので、問題が発生することはないと思います。しかし、私は非常に小さなJSONを期待し、そのモデル(CatMessage)を適切にマッピングし、Jacksonファイルを含めているので、これでうまくいくと思いました...しかし、以下のエラーが発生します:

02-22 00:13:42.977:E / AndroidRuntime(2052):原因:org.springframework.web.client.RestClientException:応答を抽出できませんでした:応答タイプ[org.springframework.android.basicauthに適切なHttpMessageConverterが見つかりません。 CatMessage]およびコンテンツタイプ[text/html] 02-22 00:13:42.977:E / AndroidRuntime(2052):org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:79)02-22 00: 13:42.977:E / AndroidRuntime(2052):org.springframework.web.client.RestTemplate $ ResponseEntityResponseExtractor.extractData(RestTemplate.java:655)02-22 00:13:42.977:E / AndroidRuntime(2052):org .springframework.web.client.RestTemplate $ ResponseEntityResponseExtractor.extractData(RestTemplate.java:641)02-22 00:13:42.977:E / AndroidRuntime(2052):org.springframework.web.clientで。RestTemplate.doExecute(RestTemplate.java:484)02-22 00:13:42.977:E / AndroidRuntime(2052):org.springframework.web.client.RestTemplate.execute(RestTemplate.java:439)02-22 00: 13:42.977:E / AndroidRuntime(2052):at o rg.springframework.web.client.RestTemplate.exchange(RestTemplate.java:415)

誰かが私の問題がどこにあるのか考えていますか?とても簡単に思える何かに何時間も取り組むのは大変です...ありがとう!

4

1 に答える 1

0

あなたのコードは問題ないように見えますが、私が考えることができる唯一の説明は、あなたが呼び出しているサービス

  1. JSON コンテンツを生成しません。
  2. JSON を生成しますが、Content-Typeレスポンス ヘッダーtext/jsonまたはこのようなものを設定します (デフォルトではMappingJackson2HttpMessageConverterのみが認識application/jsonされます)。

Content-Type応答ヘッダーを確認できますか(これは、RestTemplateが適切なものを選択するために使用するものそのものHttpMessageConverterです)。

于 2013-02-22T00:26:37.173 に答える