HarmonyOS 鸿蒙Next retrofit使用统一添加请求头

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next retrofit使用统一添加请求头

问题1:在使用ServiceBuilder时,怎么添加一个普遍的请求头:appid和appkey,不想在写方法的时候再加上@Header,不然很多方法都写一模一样的header了
深色代码主题
复制
private apiService: ApiService = new ServiceBuilder()
.setEndpoint(https://apigw-cn-south.huawei.com)
.build(ApiService);

问题2:ServiceBuilder中的setClient()怎么使用,需要输入一个HttpClient的参数,但是这个参数用不了

深色代码主题
复制
private apiService: ApiService = new ServiceBuilder()
.setEndpoint(https://apigw-cn-south.huawei.com)
.setClient()
.build(ApiService);


更多关于HarmonyOS 鸿蒙Next retrofit使用统一添加请求头的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

ArkTS支持TS5.0之前的TS装饰器语法。注意,如果在ets文件中定义装饰器,则需要同时满足ArkTS的语法规则,比如不能使用any等。以下是简单示例:

深色代码主题
复制
// 类装饰器
function decorateKlass(target: ESObject) {
  console.log("decorateKlass")
}

@decorateKlass class Person { age: number = 12 }

// 方法装饰器 export function MyDescriptor(target: Object, key: string, descriptor: PropertyDescriptor) { const originalMethod: Function = descriptor.value descriptor.value = (…args: Object[]) => { console.log(Calling <span class="hljs-subst">${target.constructor.name}</span> method <span class="hljs-subst">${key}</span> with argument: <span class="hljs-subst">${args}</span>) const result: Object = originalMethod(…args) console.log(Method <span class="hljs-subst">${key}</span> returned: <span class="hljs-subst">${result}</span>) return result } return descriptor }

@Entry @Component struct DecoratorDemo { @State message: string = ‘Hello World’;

aboutToAppear() { this.demo() }

build() { Flex() { } .backgroundColor(Color.Green) .constraintSize({ minWidth: 100, maxWidth: 200, minHeight: 0, maxHeight: 200 }) .height(‘100%’) }

@MyDescriptor demo() { let person = new Person(); return person.age } }

更多关于HarmonyOS 鸿蒙Next retrofit使用统一添加请求头的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


多谢大佬指点

问题1. 暂无,您可尝试自定义装饰器装饰在类上,装饰器 · TypeScript中文网 · TypeScript——JavaScript的超集

retrofit_next有您要的这个特性,可在类定义上增加[@BaseHeader](/user/BaseHeader)注解

深色代码主题
复制
@BaseHeaders({
  'Content-type1': 'application/json; charset=UTF-8',
  'Content-type2': 'Content-type2',
  'Content-type3': 'Content-type3'
})
export class ApiService {

retrofit_next: HarmonyOS Next 网络请求框架,基于@ohos.net.http库和@ohos.request,也可以支持其它http库扩展。旨在项目开发中,快速集成

问题2. 是否看过entry/src/main/ets/pages/Index2.ets · OpenHarmony-TPC/retrofit - 码云 - 开源中国这个例子,见53行和236行

深色代码主题
复制
let client: HttpClient = new  HttpClient.Builder()
  .setConnectTimeout(999999)
  .setReadTimeout(77, TimeUnit.SECONDS)
  .build();
深色代码主题
复制
const userService: UserService = new ServiceBuilder()
  .setEndpoint("https://dummy.restapiexample.com/api/v1")
  .setClient(client)
  .build(UserService);

好的 感谢大佬

简单看了一下 如果reftrofit_next库更加方便的话,其实也可以用这个,不知道这个第三方库生态如何,是否长期更新,这个咋判断

在HarmonyOS鸿蒙Next环境中使用Retrofit进行网络请求时,若需统一添加请求头,可通过自定义OkHttpClient来实现。以下是一个简洁的示例:

  1. 创建拦截器
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;

public class HeaderInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request original = chain.request();
        Request.Builder requestBuilder = original.newBuilder()
                .addHeader("Custom-Header", "HeaderValue");
        Request request = requestBuilder.build();
        return chain.proceed(request);
    }
}
  1. 配置Retrofit
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import okhttp3.OkHttpClient;

public class RetrofitClient {
    private static Retrofit retrofit;

    public static Retrofit getClient(String baseUrl) {
        if (retrofit == null) {
            OkHttpClient client = new OkHttpClient.Builder()
                    .addInterceptor(new HeaderInterceptor())
                    .build();

            retrofit = new Retrofit.Builder()
                    .baseUrl(baseUrl)
                    .client(client)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
}
  1. 使用Retrofit: 通过RetrofitClient.getClient(baseUrl)获取Retrofit实例,并创建API接口进行请求。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部