Json JavaObject 互相转换
引入第三方组件对 JSON 做验证, 调用 JsonSanitizer.sanitize() 进行校验
Maven依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.14.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.15.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.1</version>
</dependency>
--new ObjectMapper()
<dependency>
<groupId>com.mikesamuel</groupId>
<artifactId>json-sanitizer</artifactId>
<version>1.2.3</version>
</dependency>
--引入第三方组件对 JSON 做验证, 调用 JsonSanitizer.sanitize() 进行校验
序列化(Object → Json)
jackson
public static <T> String toJson(T object) {
ObjectMapper objectMapper = new ObjectMapper();
String jsonStr = null;
try {
jsonStr = objectMapper.writeValueAsString(object);
} catch (JsonProcessingException e) {
log.info("occur error:{}", e.getMessage());
}
return jsonStr;
}
public static <T> String toJsonNonNullSnake(T object) {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
String jsonStr = null;
try {
jsonStr = objectMapper.writeValueAsString(object);
} catch (JsonProcessingException e) {
log.info("occur error:{}", e.getMessage());
}
return jsonStr;
}
Gson
public static <T> String toJson2(T object) {
Gson gson = new GsonBuilder()
.setLenient()// json宽松
.enableComplexMapKeySerialization()//支持Map的key为复杂对象的形式
.serializeNulls() //智能null
.setPrettyPrinting() // 美化格式
.disableHtmlEscaping() //默认是GSON把HTML转义的
.create();
return gson.toJson(object);
}
UT
@Test
public void testToJson_BeanToJson() {
Person person = new Person();
person.setId(1);
person.setName("name");
person.setAge(18);
String json = JsonUtils.toJson(person);
assertThat(json).isEqualTo("{\"id\":1,\"name\":\"name\",\"age\":18,\"nickName\":null}");
}
@Test
public void testToJson_MapToJson() {
Map<String, Object> map = new HashMap<>();
map.put("id", 1L);
map.put("name", "name");
map.put("age", 18);
String json = JsonUtils.toJson(map);
assertThat(json).isEqualTo("{\"name\":\"name\",\"id\":1,\"age\":18}");
}
@Test
public void testToJson_noNull_Snake() {
Person person = new Person();
person.setId(1);
person.setName("name");
person.setAge(null);
person.setNickName("nickName");
String json = JsonUtils.toJsonNonNullSnake(person);
assertThat(json).isEqualTo("{\"id\":1,\"name\":\"name\",\"nick_name\":\"nickName\"}");
}
@Test
public void testToJson2_BeanToJson() {
Person person = new Person();
person.setId(1);
person.setName("name");
person.setAge(18);
String json = JsonUtils.toJson2(person);
assertThat(json).isEqualTo("{\"id\":1,\"name\":\"name\",\"age\":18,\"nickName\":null}");
}
反序列化(Json → Object)
jackson
public static <T> T jsonToT(String json, Class<T> clazz) {
ObjectMapper objectMapper = new ObjectMapper();
T t = null;
try {
t = objectMapper.readValue(JsonSanitizer.sanitize(json), clazz);
} catch (JsonProcessingException e) {
log.info("occur error:{}", e.getMessage());
}
return t;
}
public static <T> T jsonToTNonNullSnake(String json, Class<T> clazz) {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 跳过不认识字段
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // 不包括null
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); // 属性蛇形命名
T t = null;
try {
t = objectMapper.readValue(JsonSanitizer.sanitize(json), clazz);
} catch (JsonProcessingException e) {
log.info("occur error:{}", e.getMessage());
}
return t;
}
Gson
public static <T> T jsonToTG(String json, Class<T> clazz) {
Gson gson = new GsonBuilder()
.setLenient()// json宽松
.enableComplexMapKeySerialization()//支持Map的key为复杂对象的形式
.serializeNulls() //智能null
.setPrettyPrinting()// 美化格式
.disableHtmlEscaping() //默认是GSON把HTML转义的
.create();
return gson.fromJson(Normalizer.normalize(JsonSanitizer.sanitize(json), Normalizer.Form.NFC), clazz);
}
UT
@Test
public void testJsonToBean() {
String json = "{\"id\":1,\"name\":\"name\",\"age\":18}";
ObjectMapper mapper = new ObjectMapper();
Person person = JsonUtils.jsonToT(json, Person.class);
System.out.println(person);
}
@Test
public void testJsonToMap() {
String json = "{\"id\":1,\"name\":\"name\",\"age\":18}";
Map map = JsonUtils.jsonToT(json, Map.class);
System.out.println(map);
}
@Test
public void testJsonToBean_noNull_Snake() {
String json = "{\"id\":1,\"name\":\"name\",\"nick_name\":\"nickName\"}";
ObjectMapper mapper = new ObjectMapper();
Person person = JsonUtils.jsonToTNonNullSnake(json, Person.class);
System.out.println(person);
}
@Test
public void testJsonToBean_Gson() {
String json = "{\"id\":1,\"name\":\"name\",\"nick_name\":\"nickName\"}";
String json2 = "{\"id\":1,\"name\":\"name\",\"age\":18},\"nickName\":\"nickName\"}";
ObjectMapper mapper = new ObjectMapper();
Person person = JsonUtils.jsonToTG(json, Person.class);
System.out.println(person);
Person person2 = JsonUtils.jsonToTG(json2, Person.class);
System.out.println(person2);
}
安全
JSON Injection
还没有评论,来说两句吧...