如何解决这个要求,Android条件序列化名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决这个要求,Android条件序列化名称相关的知识,希望对你有一定的参考价值。

我试图增加我的请求有效负载的安全性,其中一个措施是加密或模糊我的json的成员密钥,这样更模糊...

这是我想要做的,

public class LoginRequest {

    private static final String SERIALIZED_NO = BuildConfig.DEBUG ? "no": "xyz";

    private LoginRequest() {
        // This class is not publicly instantiable
    }

    public static class ServerLoginRequest extends ParentRequest {

        @Expose
        @SerializedName(SERIALIZED_NO)
        private String no;

这是我的代码的图像......

code preview

现在错误是这个,@SerializedName(SERIALIZED_NO)必须是一个常数我读了一些文章但是没有运气到目前为止我认为没有办法像C#中的条件注释,顺便说一句,当然,我可以用我的后端处理这个因为它不是java,以一些聪明的方式。

答案

这看起来像How to supply value to an annotation from a Constant java的副本给我,但有解决方案,但我不认为你喜欢它:)

这是你可以做的:

  1. 创建两个新的源代码层次结构,一个以debug开头,另一个以release开头 - 与main层次结构处于同一级别。
  2. 将您的模型的一个副本放在debug/java/...your package structure to model...下,使用@SerializedName("no")
  3. 使用release/java/...your package structure to model...将您的模型的另一个副本放在@SerializedName("xyz")
  4. main/...your package structure to model...层次结构中删除数据模型

您现在可以在main下使用您的模型,但它将始终是一个或另一个,具体取决于您使用的构建类型。

另一答案

SERIALIZED_NO显然不是恒定的。它的值取决于BuildConfig.DEBUG。然而,听起来有点不必使用常量作为条件来产生另一个不再是常量的常量。尝试将SERIALIZED_NO的定义移动到接口,看看会发生什么,否则你可以使用相当于C ++中的编译器指令的依赖注入。

以上是关于如何解决这个要求,Android条件序列化名称的主要内容,如果未能解决你的问题,请参考以下文章

如何在一组行之后或有条件地在没有 PL/SQL 块的情况下增加 oracle 序列?

Android开发中相见恨晚的细节

Android程序中嵌入WebView,单击其中的链接时无反应,请问是啥原因引起的?如何解决?

如何以编程方式查找 Android 版本名称?

如何在条件展开序列中传递数据?

如何解决列表视图中的这个错误?