Tauri 2.0 插件开发踩坑记录(1)

tauri2, coding

最近在开发 Tauri 2.0 的插件的时候,遇到了一个问题,就是我在 TypeScript 中定义了一个对象参数用来传递给插件,在 Android 端会出问题,定义如下:

guest-js/index.ts

export interface Options {
  privacyUrl: string;
  isPrivacyDialogRequired: boolean;
}

Android 中定义如下:

@InvokeArg
class Options {
  lateinit var privacyUrl: String
  var isPrivacyDialogRequired: Boolean = true
}

按照这种方式定义之后,如果在调用这个插件的时候,isPrivacyDialogRequired 设置为 false,在 Android 的结果依然会是:true

这个问题在 [阿里巴巴Java开发手册](https://github.com/alibaba/p3c) 中有提到:【强制】POJO 类中布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列化错误。

Tauri 2.0 默认使用的序列化框架 jackson 就会出现这个问题。两种方式解决这个问题:

  1. 不使用 is 开头的属性来定义布尔类型变量;
  2. 则是使用 JsonProperty 注解:
import com.fasterxml.jackson.annotation.JsonProperty

@InvokeArg
class Options {
  lateinit var privacyUrl: String

  @JsonProperty("isPrivacyDialogRequired")
  var isPrivacyDialogRequired: Boolean = true
}

通过这样修改之后,就可以正常处理反序列化了。




参考文档 #