GSON - 与命名策略可选和必填字段(GSON - Optional and required

2019-09-27 12:17发布

我需要一个功能,读取一个JSON文件和控制JSON文件的所有制结构。 必填字段应该被定义。 为此,我发现,解决我的问题的一部分的问题GSON可选和必需的字段 。 但是,在这种情况下,命名约定并没有任何动力多。 在我来说,我用以下GsonBuilder:

 this.gsonUpperCamelCase = new GsonBuilder()
            .registerTypeAdapter(TestClass.class, new AnnotatedDeserializer<TestClass>())
            .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
            .create();

从JSON每一个键值,也就是在这种情况下,反序列化的Java对象必须是小写。 否则,它会抛出JsonParseException。

例如,我有这个类:

class TestClass {
  @JsonRequired
  private String testName;
  //getter & setter

那么这个JSON文件不能被反序列化:

{
   "TestName":"name"
}

但我想确保UPPER_CAMEL_CASE在这种情况下使用。 谢谢。

Answer 1:

SerializedName是注释,可以帮助你在这。 修改TestClass如下,你应该能够与反序列化一个JSON TestNametntn2和序列化时,它总是使用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));
}

产量

name
{"testName":"name"}


文章来源: GSON - Optional and required fields with naming policy