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

问题描述 投票:1回答:2

我试图增加我的请求有效负载的安全性,其中一个措施是加密或模糊我的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,以一些聪明的方式。

java android json security serialization
2个回答
0
投票

这看起来像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下使用您的模型,但它将始终是一个或另一个,具体取决于您使用的构建类型。


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.