我使用ObjectMapper
之类的:
MyObject object = new ObjectMapper().readValue(jsonString, MyObject.class);
MyObject
有100个字段,它们都是大写的。
我不想放
每个字段都有@JsonProperty(value = "CapitalizedFieldName")
,因为它已经以这种方式命名。我试图以大写的方式设置一个setter但它没有做任何事情。只有@JsonProperty
注释的字段才会被序列化。
我可以在课堂上使用一些全局注释吗?
答案 0 :(得分:2)
您可以使用:
objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
您可以找到更多详情here。
答案 1 :(得分:0)
您可以使用Google的Gson Library并创建自定义反序列化器来实现此目的。
例如:考虑要反序列化的Employee类。
public class Employee {
private String name;
private String cell;
public Employee(String name, String cell) {
super();
this.name = name;
this.cell = cell;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCell() {
return cell;
}
public void setCell(String cell) {
this.cell = cell;
}
}
将自定义反序列化程序编写为:
public class CapsDeserializer implements JsonDeserializer<Employee> {
@Override
public Employee deserialize(JsonElement json, Type arg1, JsonDeserializationContext arg2)
throws JsonParseException {
JsonObject jobject = json.getAsJsonObject();
try {
Employee emp = new Employee(
jobject.get(Employee.class.getDeclaredField("name").getName().toUpperCase()).getAsString(),
jobject.get(Employee.class.getDeclaredField("cell").getName().toUpperCase()).getAsString());
return emp;
} catch (NoSuchFieldException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
注意:字段名称可通过反射访问,然后转换为大写字母。由于类的字段名称是小写字母,而输入的json的字段名称是大写字母。
要执行的示例程序:
public class GsonExampleApplication {
public static void main(String[] args) {
Gson gson = new Gson();
Employee test = new Employee("", "");
test.setCell("1234567891");
test.setName("abhishek");
System.out.println("" + gson.toJson(test));
String json = "{\"NAME\":\"abhishek\",\"CELL\":\"1234567891\"}";
FieldNamingStrategy f = gson.fieldNamingStrategy();
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Employee.class, new CapsDeserializer());
Gson cgson = gsonBuilder.create();
Employee obj = cgson.fromJson(json, Employee.class);
System.out.println(obj.getName() + " " + obj.getCell());
}
}