【发布时间】:2016-01-11 07:21:11
【问题描述】:
我正在编写一个类JsonUtils,它将包含不同的函数来序列化和反序列化数据。
public class JsonUtils {
private static final ObjectMapper JSON_MAPPER = new ObjectMapper();
public static String toJsonString(Object obj) {
String json = null;
JSON_MAPPER.setPropertyNamingStrategy(new CustomNamingStrategy());
JSON_MAPPER.setSerializationInclusion(Inclusion.NON_NULL);
try {
System.out.print("OBJECT MAPPER:---> JSON STRING:\n" + JSON_MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(obj));
json = JSON_MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return json;
}
public static <T> T toPOJO(String json, Class<T> type){
JSON_MAPPER.setPropertyNamingStrategy(new CustomNameNamingStrategy());
System.out.println("TO POJO: Json string " + json);
try {
return JSON_MAPPER.readValue(json, type);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
现在,我希望通用地使用这些函数。例如:有人想调用toJsonString 方法,但想使用不同的命名策略来转换为 json。或者可能想向ObjectMapper 添加一些其他属性,例如注册一个模块。
目前,ObjectMapper 属性正在函数内部设置,因此无法使用新的命名策略或 ObjectMapper 的不同属性。
有没有办法让JsonUtils 的每个用户最初都为ObjectMapper 设置自己的属性?还是一种高效且通用的方式来编写我的 Utility 类?
【问题讨论】:
-
您可以使用杰克逊对象映射器,因为它可以方便您进行所需的操作。
-
@AtaurRahmanMunna:我正在使用 jackson
ObjectMapper本身。你指的是哪个对象映射器?
标签: java json jackson objectmapper