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

发布于 1周前 作者 caililin 最后一次编辑是 5天前 来自 鸿蒙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 ${target.constructor.name} method ${key} with argument: ${args}`)
    const result: Object = originalMethod(...args)
    console.log(`Method ${key} returned: ${result}`)
    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

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!