6

私のインターフェースは次のようになります。

@Rest(rootUrl = "https://myurl.com", converters = { GsonHttpMessageConverter.class })
public interface CommunicatonInterface
{
@Get("/tables/login")
public Login login(Param param);
public RestTemplate getRestTemplate();
}

問題は、単純に体に入るためのパラメーターとして何を入れるべきかということです:

login=myName&password=myPassword&key=othereKey

エスケープ、ブラケット、クォータなし。

文字列を渡そうとしましたが、次のようになりまし "login=myName&password=myPassword&key=othereKey"たが、クォータ記号のために間違っています。

4

3 に答える 3

1
  1. 必ず FormHttpMessageConverter.class をコンバーター リストに含めてください。
  2. データの送信に Param 型を使用する代わりに、MultiValueMap 実装 (LinkedMultiValueMap など) を使用するか、Param クラスを LinkedMultiValueMap で拡張します。

LinkedMultiValueMap の拡張例:

@Rest(converters = {FormHttpMessageConverter.class, MappingJacksonHttpMessageConverter.class})
public interface RestClient extends RestClientRootUrl {
    @Post("/login")
    LoginResponse login(LoginRequest loginRequest);
}


public class LoginRequest extends LinkedMultiValueMap<String, String> {
    public LoginRequest(String username, String password) {
        add("username", username);
        add("password", password);
    }
}
于 2014-01-07T23:31:09.850 に答える
1

私が正しく理解していれば、フォームからメソッドにパラメータを投稿loginしたいと考えています。password

このためには、次の手順を実行していることを確認する必要があります。

  1. login名前としてとを含む入力テキスト フィールドを持つログイン フォームを作成しますpassword
  2. にメソッドがあることを確認しformてくださいPOST。URL にユーザーの資格情報を get params として含める必要はありませんが、ユースケースでそれを行う必要がある場合は、可能です。
  3. では、 を使用するInterface代わりに を使用GsonHttpMessageConverterする必要がありますFormHttpMessageConverter。このコンバーターは、フォーム送信に適しapplication/x-www-form-urlencodedたコンテンツを受け入れて返します。content-type
  4. クラスParamには、入力テキスト フィールドと同じ名前のフィールドが必要です。あなたの場合、loginそしてpassword。これを行うと、フォームに投稿されたリクエスト パラメータがparamインスタンスで使用できるようになります。

お役に立てれば。

于 2013-12-06T01:43:42.683 に答える
0

渡されたオブジェクトに基づいてコンバーターが選択されるため、複数のコンバーターを使用できます。つまり、MultiValueMap を渡すと、Android Annotations が HttpEntity を作成するため、何らかの理由でそれがヘッダーに追加されます。リカルドが提案したように MultiValueMap を拡張すると、機能します。

于 2014-02-21T22:10:27.700 に答える