Не авторизован при отправке методом POST - PullRequest
0 голосов
/ 23 мая 2019

У меня проблема с модификацией и пост-методом. Мой метод GET с аутентификацией работает, но POST не работает. Я вошел без проблем, и делаю любой GET метод.

Когда я пытаюсь отправить некоторые данные в REST API (Spring), я получаю эту ошибку:

Ответ {протокол = http / 1.1, код = 401, сообщение =, URL = http://10.101.12.31:8080/add}

Мой код:

DataAPI.java:

public class DataAPI {
    private static final String BASE_URL = "http://10.101.12.31:8080/";
    static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
    private static Retrofit.Builder builder =
            new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create());
    private static Retrofit retrofit = builder.build();

    public static <S> S createService(Class<S> serviceClass) {
        return createService(serviceClass, null, null);
    }

    public static <S> S createService(
            Class<S> serviceClass, String username, String password) {
        if (!TextUtils.isEmpty(username)
                && !TextUtils.isEmpty(password)) {
            String authToken = Credentials.basic(username, password);
            return createService(serviceClass, authToken);
        }

        return createService(serviceClass, null);
    }

    public static <S> S createService(
            Class<S> serviceClass, final String authToken) {
        if (!TextUtils.isEmpty(authToken)) {
            AuthenticationInterceptor interceptor =
                    new AuthenticationInterceptor(authToken);

            if (!httpClient.interceptors().contains(interceptor)) {
                httpClient.addInterceptor(interceptor);

                builder.client(httpClient.build());
                retrofit = builder.build();
            }
        }

        return retrofit.create(serviceClass);
    }



    public static DepartmentService getDepartmentService() {
        return retrofit.create(DepartmentService.class);
    }
}

AuthenticationInterceptor.java:

public class AuthenticationInterceptor implements Interceptor {

    private String authToken;

    public AuthenticationInterceptor(String token) {
        this.authToken = token;
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request original = chain.request();

        Request.Builder builder = original.newBuilder()
                .addHeader("Authorization", authToken);

        Request request = builder.build();
        return chain.proceed(request);
    }
}

Веб-интерфейс:

public interface Service {
    @POST("/add") 
    Call<Void> addUser(@Body User user);
}

Метод:

public void buttonOne(View v) {
        DataAPI.createService(Service.class, getIntent().getStringExtra("authToken"))
                .addUser(user)).enqueue(new Callback<User>() {
            @Override
            public void onResponse(Call<User> call, Response<User> response) {
                System.out.println(response);
            }

            @Override
            public void onFailure(Call<User> call, Throwable t) {
                Toast.makeText(getApplicationContext(),t.toString(),Toast.LENGTH_SHORT).show();
            }
        });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...