Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Retrofit com content-type: application/x-www-form-urlencoded

Estou tentando enviar uma requisição via POST para um servidor C#

@Headers( {"content-type: application/x-www-form-urlencoded;charset=UTF-8", })
    @POST("login")
    Call<Void> login(
            @Body Credential credential
    );

Porem ele está me retornando erro 400 (Com o ionic eu consigo fazer a requisição normal)... olhei no log com o HttpLoggingInterceptor, e ele mostrou que está sendo enviado as credenciais dessa forma...

{"token":"123","password":"123","username":"teste@teste.com.br"}

Indo pelo Postman, ele dá erro quando a chave e o valor estão envolvidos em aspas, porém quando estão sem, ele vai normal e consigo acessar a requisição... Pesquisei na internet e encontrei essa anotação @JsonRawValue para ser usada na entidade, porém ele só tira as aspas do valor ficando como abaixo...

{"token":123,"password":123,"username":teste@teste.com.br}

Sei que no formato x-www-form-urlencoded, ele envia dessa forma token=123&password=123&username=teste%40teste.com.br... porem acho que o problema está nessas aspas da chave... teria uma forma de enviar a requisição sem elas ?

1 resposta
solução!

Encontrei uma solução... Usar a anotação @FormUrlEncoded e na definição do método usar dessa forma abaixo com @Field

@FormUrlEncoded
@Headers( {"content-type: application/x-www-form-urlencoded;charset=UTF-8", })
    @POST("login")
    Call<Void> login(
        @Field("grant_type") String grant_type,
        @Field("username")  String username,
        @Field("password") String password
    );

Existe alguma forma de eu passar a entidade Credential sem eu precisar passar um por um dessa forma acima ?