Java GSON-具有命名策略的可选字段和必填字段

Java GSON-具有命名策略的可选字段和必填字段,java,gson,deserialization,Java,Gson,Deserialization,我需要一个函数,它读取json文件并控制json文件的结构。应定义必填字段。为此 我发现一个问题解决了我的一部分问题。但在这种情况下,命名约定不再有效。在我的案例中,我使用了以下GsonBuilder: this.gsonUpperCamelCase = new GsonBuilder() .registerTypeAdapter(TestClass.class, new AnnotatedDeserializer<TestClass>())

我需要一个函数,它读取json文件并控制json文件的结构。应定义必填字段。为此 我发现一个问题解决了我的一部分问题。但在这种情况下,命名约定不再有效。在我的案例中,我使用了以下GsonBuilder:

 this.gsonUpperCamelCase = new GsonBuilder()
            .registerTypeAdapter(TestClass.class, new AnnotatedDeserializer<TestClass>())
            .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
            .create();
则无法反序列化此JSON文件:

{
   "TestName":"name"
}

但我想确定在这个案例中使用了UPPER_CAMEL_案例。Thx.

SerializedName
是可以帮助您实现这一点的注释。如下修改
TestClass
,您应该能够使用
TestName
tn
tn2
反序列化JSON,并且在序列化时,它总是使用
TestName

static class TestClass {
    @JsonRequired
    @SerializedName(value="testName", alternate = {"TestName", "tn", "tn2"})
    private String testName;
}



public static void main(String[] args) {
    Gson gsonUpperCamelCase = new GsonBuilder()
            .registerTypeAdapter(TestClass.class,
                    new AnnotatedDeserializer<TestClass>())
            .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
            .create();

    TestClass tc = gsonUpperCamelCase.fromJson("{\r\n" + 
            "   \"TestName\":\"name\"\r\n" + 
            "}", TestClass.class);

    System.out.println(tc.testName);

    System.out.println(gsonUpperCamelCase.toJson(tc));
}

MissBonbon,你说的“控制结构”是什么意思?我想确定,JSON文件中给出了“TestName”。这么简单?!?!我非常感激!THX:)
static class TestClass {
    @JsonRequired
    @SerializedName(value="testName", alternate = {"TestName", "tn", "tn2"})
    private String testName;
}



public static void main(String[] args) {
    Gson gsonUpperCamelCase = new GsonBuilder()
            .registerTypeAdapter(TestClass.class,
                    new AnnotatedDeserializer<TestClass>())
            .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
            .create();

    TestClass tc = gsonUpperCamelCase.fromJson("{\r\n" + 
            "   \"TestName\":\"name\"\r\n" + 
            "}", TestClass.class);

    System.out.println(tc.testName);

    System.out.println(gsonUpperCamelCase.toJson(tc));
}
name
{"testName":"name"}