Java 如何解决这一需求,Android条件序列化dname

Java 如何解决这一需求,Android条件序列化dname,java,android,json,security,serialization,Java,Android,Json,Security,Serialization,我试图提高我的请求负载的安全性,其中一个措施是加密或模糊我的json的成员密钥,这样会更加模糊 这就是我想要做的 public class LoginRequest { private static final String SERIALIZED_NO = BuildConfig.DEBUG ? "no": "xyz"; private LoginRequest() { // This class is not publicly instantiable

我试图提高我的请求负载的安全性,其中一个措施是加密或模糊我的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;
这是我的代码的图像

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

这对我来说像是一个复制品,但是有解决方案,但我认为你不会喜欢它:)

以下是您可以做的:

  • 创建两个新的源代码层次结构,一个从
    debug
    开始,另一个从
    release
    开始,与您的
    main
    层次结构处于同一级别
  • 将模型的一个副本放在
    debug/java/…模型的包结构下,
    @SerializedName(“no”)
  • 将模型的另一个副本放在
    release/java/…下,使用
    @SerializedName(“xyz”)
  • main/…将数据模型从包结构删除到模型…
    层次结构

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

    序列化的\u NO显然不是常量。其值取决于BuildConfig.DEBUG。然而,用一个常数作为条件来生成另一个不再是常数的常数听起来有点不必要。尝试将SerialEddieNo的定义移到接口并查看发生了什么,否则您可以使用依赖注入,它相当于C++中的编译器指令。