GSON - 具有命名策略

时间:2017-02-03 10:08:01

标签: java gson deserialization

我需要一个函数,它读取一个json文件并控制json文件的结构。必须定义必填字段。为了那个原因 我找到了一个可以解决问题的一部分Gson optional and required fields的问题。但在这种情况下,命名约定不再具有权力。就我而言,我使用了以下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。 THX。

1 个答案:

答案 0 :(得分:1)

SerializedName是可以帮助您的注释。修改TestClass如下所示,您应该能够使用TestNametntn2反序列化JSON,并且在序列化时,它始终使用testName。< / p>

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"}
相关问题