FeignClient API-Call с приложением / x-www-form-urlencoded HEADER - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь вызвать Azure-API, чтобы получить токен доступа.С почтальоном эта работа очень хорошая.Теперь я пытаюсь сделать это с помощью весенней загрузки и симулированного клиента.

Azure-Api-Call нужен заголовок application / x-www-form-urlencoded.В интернете я узнал, что у многих людей возникают проблемы с притворством и этим заголовком.Я нашел git-repro с FormEncoder, который должен был сделать свое дело, но не сделал.

Так что я делаю:

Я создаю credentialObject с getter и сеттерами, которые включают grant_type, client_id, client_secret и ресурс.

Во-вторых, я создаю самого клиента

import feign.Headers;
import feign.RequestLine;
import org.springframework.web.bind.annotation.RequestBody;

public interface AzureProvisioningClient {

  @RequestLine("POST c760270c-f3da-4cfa-9737-03808ef5579f/oauth2/token")
  @Headers("Content-Type: application/x-www-form-urlencoded")
  Token getToken(@RequestBody Credentials credentials);
}

После этого я использую feign.Build, чтобы развернуть код здесь, собственный кодировщик, который предлагается здесь https://github.com/OpenFeign/feign-form

AzureProvisioningClient azureProvisioningClient;

Credentials credentials = new Credentials();
credentials.setGrant_type("client_credentials");
credentials.setClient_id("b7021287-ec86-4864-acbe-0bd55b4e7adc");
credentials.setClient_secret("j7v/mxLDsTA9JIkiyev9/E3+vJdaWQ8Ilz/127ASwK4=");
credentials.setResource("https://management.azure.com/");

azureProvisioningClient = Feign.builder().encoder(new FormEncoder())
                                          .target(AzureProvisioningClient.class, "https://login.microsoftonline.com/");

Token token = azureProvisioningClient.getToken(credentials);

Если я запускаю этот пример, я получаю следующую ошибку:

Caused by: feign.codec.EncodeException: class 
de.telemotive.loggerIngressService.client.Credentials is not a type supported 
by this encoder.

Я также попробовал следующее: вместо

Token getToken(@RequestBody Credentials credentials);

я пытаюсь это:Token getToken (@Param ("grant_type") Строка grant_type, @Param ("client_id") Строка client_id .......);

и чем

Token token = azureProvisioningClient.getToken("client_credentials", "b7021287-ec86-4864-acbe-0bd55b4e7adc", ......);

Теперь яполучить следующую ошибку:

Caused by: feign.FeignException: status 401 reading AzureProvisioningClient#getToken(String,String,String,String)
    at feign.FeignException.errorStatus(FeignException.java:60) ~[feign-core-9.7.0.jar:na]
    at feign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:89) ~[feign-core-9.7.0.jar:na]
    at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:143) ~[feign-core-9.7.0.jar:na]
    at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:77) ~[feign-core-9.7.0.jar:na]
    at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:102) ~[feign-core-9.7.0.jar:na]
    at com.sun.proxy.$Proxy237.getToken(Unknown Source) ~[na:na]
    at de.telemotive.loggerIngressService.handler.LoggerDeleteListener.handleIncommingDelete(LoggerDeleteListener.java:38) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_181]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_181]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_181]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_181]
    at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:181) ~[spring-messaging-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:114) ~[spring-messaging-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.cloud.stream.binding.StreamListenerMessageHandler.handleRequestMessage(StreamListenerMessageHandler.java:55) ~[spring-cloud-stream-2.0.1.RELEASE.jar:2.0.1.RELEASE]
    ... 29 common frames omitted

Надеюсь, вы можете мне помочь:)

...