Я пытаюсь использовать retrofit2 с Observables и Lombok для своих моделей, чтобы получить токен для API spotify.Я пытался с почтальоном, и он работал правильно, но у меня проблемы с Java.У меня есть эти 3 класса:
AuthorizationServiceCommandImpl.java
import com.service.userservice.feature.authorization.backend.model.Token;
import lombok.NonNull;
import okhttp3.OkHttpClient;
import org.springframework.stereotype.Service;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Single;
import rx.schedulers.Schedulers;
@Service
public class AuthorizationServiceCommandImpl implements AuthorizationServiceCommand {
private AuthorizationService authorizationService;
private static OkHttpClient createOkHttpClient() {
final OkHttpClient.Builder httpClient =
new OkHttpClient.Builder();
return httpClient.build()
}
public void getToken(String code) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://accounts.spotify.com/api/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(createOkHttpClient())
.build();
authorizationService = retrofit.create(AuthorizationService.class);
// At this point all these attributes have a value, I used System.out.println to confirm:
// clientId, clientSecret, grantType, code, redirectUri
authorizationService
.getToken(clientId, clientSecret, grantType, code, redirectUri)
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.computation())
.map(token-> token.toString());
}
}
AuthorizationService.java
import com.service.userservice.feature.authorization.backend.model.Token;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;
import rx.Single;
public interface AuthorizationService {
@FormUrlEncoded
@POST("token")
Single<Token> getToken(@Field("client_id") String clientId,
@Field("client_secret") String clientSecret,
@Field("grant_type") String grantType,
@Field("code") String code,
@Field("redirect_uri") String redirectUri);
}
Моя модель, Token.java
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@SuppressWarnings("PMD.UnusedPrivateField")
public class Token {
@SerializedName("access_token")
private String accessToken;
@SerializedName("token_type")
private String tokenType;
@SerializedName("expires_in")
private String expiresIn;
@SerializedName("refresh_token")
private String refreshToken;
@SerializedName("scope")
private String scope;
@SerializedName("error_description")
private String errorDescription;
@SerializedName("error")
private String error;
@Override
public String toString() {
System.out.println("Token{" +
"accessToken='" + accessToken + '\'' +
", tokenType='" + tokenType + '\'' +
", expiresIn='" + expiresIn + '\'' +
", refreshToken='" + refreshToken + '\'' +
", scope='" + scope + '\'' +
", errorDescription='" + errorDescription + '\'' +
", error='" + error + '\'' +
'}');
return "Token{" +
"accessToken='" + accessToken + '\'' +
", tokenType='" + tokenType + '\'' +
", expiresIn='" + expiresIn + '\'' +
", refreshToken='" + refreshToken + '\'' +
", scope='" + scope + '\'' +
", errorDescription='" + errorDescription + '\'' +
", error='" + error + '\'' +
'}';
}
}
В этой строке ничего не отображается:
.map (token-> token.toString ());
Как будто звонок никогда не был сделан.Не уверен, как я могу подтвердить, что вызов был выполнен, а также я попытался удалить эти 2 строки Observables
.subscribeOn (Schedulers.io ()) .observeOn (Schedulers.computation ())
и вернуть
Single<Token> getToken(@Field("client_id") String clientId,
но не сработало.Любая идея?Заранее спасибо