我使用ObjectMapper
像:
MyObject object=new ObjectMapper()。readValue(jsonString,MyObject.class)
MyObject
有100个字段,它们都是大写的。
我不想在每个字段上放置
@JsonProperty(value="大写字段名称")
,因为它已经这样命名了。我试图用大写的方式设置一个setter,但它什么也没做。只有具有@JsonProperty
注释的字段才会被序列化。
是否有一些全局注释可以在类中使用?
您可以通过使用谷歌的Gson库和创建自定义反序列化器来实现这一点。
例如:考虑要反序列化的雇员类。
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());
}
}
您可以使用:
objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
你可以在这里找到更多细节。
问题内容: 我能够将一个对象序列化为一个文件,然后再次还原它,如下面的代码片段所示。我想将对象序列化为字符串并存储到数据库中。谁能帮我? 问题答案: 你应该使用BLOB。使用JDBC非常简单。 你发布的第二个代码的问题是编码。你还应该对字节进行编码,以确保它们均不会失败。 如果你仍然想将其记录为字符串,则可以使用java.util.Base64对字节进行编码。 仍然应该将CLOB用作数据类型,因为
我使用JavaScript创建了以下字符串: 我想得到: 我试过这个: 但我得到了: 你能帮我吗?
问题内容: 如何将上述字符串反序列化为java对象。 我正在使用的类是 问题答案: @基达 我假设您可以控制JSON输入字符串的创建方式。我认为JSON字符串格式不正确,无法对地图类型进行默认的GSON反序列化。 我已经修改了输入字符串供您考虑,这将导致非null的LocalLocationId 如果我对输入字符串的假设不正确,请发表评论。 编辑1:由于无法修改输入,请考虑编写自定义解串器。以下是
我尝试从一个用于存储Spring会话的Redis服务器反序列化String到Java对象,并且我想在Spring框架之外反序列化它。我认为Spring Redis序列化器可能使用默认字符集UTF-8来将Java对象序列化为字符串。 Redis中的字符串: 错误消息: 我知道用UTF-8在Byte[]和String之间的转换很可能是问题所在,但我还是想问一下,是否有人知道如何在不修改序列化部分的情况
问题内容: 我有这个JavaScript原型: 然后创建一个新对象: 如果我做: 结果是: 但我需要将对象的类型包含在JSON字符串中,如下所示: 有没有使用框架之类的方法来执行此操作的快速方法?还是我需要在类中实现一个方法并手动执行? 问题答案: 编辑: 将字符串化 所有类的 “属性”。如果只想保留其中一些,则可以这样分别指定:
我需要序列化一个简单的Java对象列表到JSON使用谷歌Gson库。 我想我可以将成员变量重命名为UpperCamelCase,但可能还有另一种方法?