Я пытаюсь вызвать 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
Надеюсь, вы можете мне помочь:)