내 업그레이드 2 (2.0.2
현재) 클라이언트는 요청에 사용자 지정 헤더를 추가해야합니다. 를 들어,개조 2 - API 수준에서 헤더를 추가하는 우아한 방법
OkHttpClient httpClient = new OkHttpClient();
httpClient.networkInterceptors().add(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
final Request request = chain.request().newBuilder()
.addHeader("CUSTOM_HEADER_NAME_1", "CUSTOM_HEADER_VALUE_1")
.addHeader("CUSTOM_HEADER_NAME_2", "CUSTOM_HEADER_VALUE_2")
...
.addHeader("CUSTOM_HEADER_NAME_N", "CUSTOM_HEADER_VALUE_N")
.build();
return chain.proceed(request);
}
});
Retrofit retrofitClient = new Retrofit.Builder()
.baseUrl(baseUrl)
.client(httpClient)
.build();
항상 추가 할 일부 헤더하지만 일부 헤더는 난 단지 특정 엔드 포인트의 요구 사항에 따라 추가해야합니다
나는 모든 요청에이 헤더를 추가 할 Interceptor
을 사용하고 있습니다 사용자가 인증을 받아야하는지 여부
내가 주석을 사용하여 예를 들어, API를 수준에서 그것을 제어 할 수있는 능력을 가지고 싶은, 뭔가 같은 : 인증 토큰을 추가 할 필요가 없습니다
public interface MyApi {
@NO_AUTH
@POST("register")
Call<RegisterResponse> register(@Body RegisterRequest data);
@GET("user/{userId}")
Call<GetUserResponse> getUser(@Path("userId") String userId);
}
요청을 전송 register
에 @NO_AUTH
주석이없는 요청에는 토큰 헤더가 있습니다.
Retrofit 2는 맞춤 주석을 지원하지 않으며 Custom Annotations with Retrofit 2에 대한 해결 방법을 찾은 동안 너무 많은 것으로 보입니다.
내가 같은 요청에 따라 이러한 헤더 통과 할 필요 피하기 위해 싶습니다
public interface MyApi {
@POST("register")
Call<RegisterResponse> register(@Body RegisterRequest data);
@GET("user/{userId}")
Call<GetUserResponse> getUser(@Header("AuthToken") String token, @Path("userId") String userId);
}
그것은 단지 그것을 내가 대신 인터셉터에 그 일의 메소드를 호출 할 때마다 할 중복 느낌을 (이후 정적으로 헤더 값에 액세스 할 수 있습니다.)
필자는 어떻게 든이 특정 요청에 특정 헤더가 있어야하는지 여부를 내 Interceptor.intercept
구현에 알 필요가 있습니다.
내가 어떻게이 작업을 할 수 있는지 알고 싶습니다.
필자는 인증 토큰의 경우뿐만 아니라 일반 솔루션을 선호하지만 특정 솔루션도 환영합니다. 감사합니다.
이것은 모든 요청에 대해 새로운'''OkHttpClient'''를 사용한다는 것을 의미합니까? –
@panduka 아니, 그건 그냥 예를 들어, 당신은 하나의 클라이언트를 가질 수 있습니다. –
이것은 공유하기 덕분에 실제로 가장 깨끗한 해결책입니다. – MatPag