如何解决这个要求,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;
这是我的代码的图像......
现在错误是这个,@SerializedName(SERIALIZED_NO)
必须是一个常数我读了一些文章但是没有运气到目前为止我认为没有办法像C#中的条件注释,顺便说一句,当然,我可以用我的后端处理这个因为它不是java,以一些聪明的方式。
答案
这看起来像How to supply value to an annotation from a Constant java的副本给我,但有解决方案,但我不认为你喜欢它:)
这是你可以做的:
- 创建两个新的源代码层次结构,一个以
debug
开头,另一个以release
开头 - 与main
层次结构处于同一级别。 - 将您的模型的一个副本放在
debug/java/...your package structure to model...
下,使用@SerializedName("no")
- 使用
release/java/...your package structure to model...
将您的模型的另一个副本放在@SerializedName("xyz")
下 - 从
main/...your package structure to model...
层次结构中删除数据模型
您现在可以在main
下使用您的模型,但它将始终是一个或另一个,具体取决于您使用的构建类型。
另一答案
SERIALIZED_NO显然不是恒定的。它的值取决于BuildConfig.DEBUG。然而,听起来有点不必使用常量作为条件来产生另一个不再是常量的常量。尝试将SERIALIZED_NO的定义移动到接口,看看会发生什么,否则你可以使用相当于C ++中的编译器指令的依赖注入。
以上是关于如何解决这个要求,Android条件序列化名称的主要内容,如果未能解决你的问题,请参考以下文章
如何在一组行之后或有条件地在没有 PL/SQL 块的情况下增加 oracle 序列?