我需要一个函数,它读取一个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。
答案 0 :(得分:1)
SerializedName
是可以帮助您的注释。修改TestClass
如下所示,您应该能够使用TestName
,tn
,tn2
反序列化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"}