首页 > 解决方案 > 发送 POST 方法时未授权

问题描述

我对改造和发布方法有疑问。我GET的身份验证方法有效,但POST不起作用。我登录没有任何问题,并且做任何GET方法。

当我尝试将一些数据发送到 REST API (Spring) 时,我收到此错误:

响应{protocol=http/1.1, code=401, message=, url= http://10.101.12.31:8080/add }

我的代码:

数据API.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();
            }
        });
    }

标签: androidspringretrofit

解决方案


推荐阅读