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

时间:2019-04-14 08:11:55

标签: 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
    }

    public static class ServerLoginRequest extends ParentRequest {

        @Expose
        @SerializedName(SERIALIZED_NO)
        private String no;

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

code preview

现在错误是,@SerializedName(SERIALIZED_NO)必须是一个常数 我看了一些文章,但到目前为止还算不上运气,我认为没有办法像C#,btw那样进行条件注释,当然,由于它不是Java,所以可以用后端以某种巧妙的方式来处理它。

2 个答案:

答案 0 :(得分: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 :(得分:-1)

SERIALIZED_NO显然不是常数。它的值取决于BuildConfig.DEBUG。但是,使用常量作为条件来生成另一个不再是常量的常量听起来有点不必要。尝试将SERIALIZED_NO的定义移至接口,然后看看会发生什么,否则您可以使用与C ++中的编译器指令等效的依赖注入。