Json JavaObject 互相转换

你的名字 2024-03-25 23:48 141阅读 0赞

引入第三方组件对 JSON 做验证, 调用 JsonSanitizer.sanitize() 进行校验
在这里插入图片描述


Maven依赖

  1. <dependency>
  2. <groupId>com.fasterxml.jackson.core</groupId>
  3. <artifactId>jackson-core</artifactId>
  4. <version>2.14.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.fasterxml.jackson.core</groupId>
  8. <artifactId>jackson-annotations</artifactId>
  9. <version>2.15.1</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>com.fasterxml.jackson.core</groupId>
  13. <artifactId>jackson-databind</artifactId>
  14. <version>2.15.1</version>
  15. </dependency>
  16. --new ObjectMapper()
  17. <dependency>
  18. <groupId>com.mikesamuel</groupId>
  19. <artifactId>json-sanitizer</artifactId>
  20. <version>1.2.3</version>
  21. </dependency>
  22. --引入第三方组件对 JSON 做验证, 调用 JsonSanitizer.sanitize() 进行校验

序列化(Object → Json)

jackson

  1. public static <T> String toJson(T object) {
  2. ObjectMapper objectMapper = new ObjectMapper();
  3. String jsonStr = null;
  4. try {
  5. jsonStr = objectMapper.writeValueAsString(object);
  6. } catch (JsonProcessingException e) {
  7. log.info("occur error:{}", e.getMessage());
  8. }
  9. return jsonStr;
  10. }
  11. public static <T> String toJsonNonNullSnake(T object) {
  12. ObjectMapper objectMapper = new ObjectMapper();
  13. objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
  14. objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
  15. String jsonStr = null;
  16. try {
  17. jsonStr = objectMapper.writeValueAsString(object);
  18. } catch (JsonProcessingException e) {
  19. log.info("occur error:{}", e.getMessage());
  20. }
  21. return jsonStr;
  22. }

Gson

  1. public static <T> String toJson2(T object) {
  2. Gson gson = new GsonBuilder()
  3. .setLenient()// json宽松
  4. .enableComplexMapKeySerialization()//支持Map的key为复杂对象的形式
  5. .serializeNulls() //智能null
  6. .setPrettyPrinting() // 美化格式
  7. .disableHtmlEscaping() //默认是GSON把HTML转义的
  8. .create();
  9. return gson.toJson(object);
  10. }

UT

  1. @Test
  2. public void testToJson_BeanToJson() {
  3. Person person = new Person();
  4. person.setId(1);
  5. person.setName("name");
  6. person.setAge(18);
  7. String json = JsonUtils.toJson(person);
  8. assertThat(json).isEqualTo("{\"id\":1,\"name\":\"name\",\"age\":18,\"nickName\":null}");
  9. }
  10. @Test
  11. public void testToJson_MapToJson() {
  12. Map<String, Object> map = new HashMap<>();
  13. map.put("id", 1L);
  14. map.put("name", "name");
  15. map.put("age", 18);
  16. String json = JsonUtils.toJson(map);
  17. assertThat(json).isEqualTo("{\"name\":\"name\",\"id\":1,\"age\":18}");
  18. }
  19. @Test
  20. public void testToJson_noNull_Snake() {
  21. Person person = new Person();
  22. person.setId(1);
  23. person.setName("name");
  24. person.setAge(null);
  25. person.setNickName("nickName");
  26. String json = JsonUtils.toJsonNonNullSnake(person);
  27. assertThat(json).isEqualTo("{\"id\":1,\"name\":\"name\",\"nick_name\":\"nickName\"}");
  28. }
  29. @Test
  30. public void testToJson2_BeanToJson() {
  31. Person person = new Person();
  32. person.setId(1);
  33. person.setName("name");
  34. person.setAge(18);
  35. String json = JsonUtils.toJson2(person);
  36. assertThat(json).isEqualTo("{\"id\":1,\"name\":\"name\",\"age\":18,\"nickName\":null}");
  37. }

反序列化(Json → Object)

jackson

  1. public static <T> T jsonToT(String json, Class<T> clazz) {
  2. ObjectMapper objectMapper = new ObjectMapper();
  3. T t = null;
  4. try {
  5. t = objectMapper.readValue(JsonSanitizer.sanitize(json), clazz);
  6. } catch (JsonProcessingException e) {
  7. log.info("occur error:{}", e.getMessage());
  8. }
  9. return t;
  10. }
  11. public static <T> T jsonToTNonNullSnake(String json, Class<T> clazz) {
  12. ObjectMapper objectMapper = new ObjectMapper();
  13. objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 跳过不认识字段
  14. objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // 不包括null
  15. objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); // 属性蛇形命名
  16. T t = null;
  17. try {
  18. t = objectMapper.readValue(JsonSanitizer.sanitize(json), clazz);
  19. } catch (JsonProcessingException e) {
  20. log.info("occur error:{}", e.getMessage());
  21. }
  22. return t;
  23. }

Gson

  1. public static <T> T jsonToTG(String json, Class<T> clazz) {
  2. Gson gson = new GsonBuilder()
  3. .setLenient()// json宽松
  4. .enableComplexMapKeySerialization()//支持Map的key为复杂对象的形式
  5. .serializeNulls() //智能null
  6. .setPrettyPrinting()// 美化格式
  7. .disableHtmlEscaping() //默认是GSON把HTML转义的
  8. .create();
  9. return gson.fromJson(Normalizer.normalize(JsonSanitizer.sanitize(json), Normalizer.Form.NFC), clazz);
  10. }

UT

  1. @Test
  2. public void testJsonToBean() {
  3. String json = "{\"id\":1,\"name\":\"name\",\"age\":18}";
  4. ObjectMapper mapper = new ObjectMapper();
  5. Person person = JsonUtils.jsonToT(json, Person.class);
  6. System.out.println(person);
  7. }
  8. @Test
  9. public void testJsonToMap() {
  10. String json = "{\"id\":1,\"name\":\"name\",\"age\":18}";
  11. Map map = JsonUtils.jsonToT(json, Map.class);
  12. System.out.println(map);
  13. }
  14. @Test
  15. public void testJsonToBean_noNull_Snake() {
  16. String json = "{\"id\":1,\"name\":\"name\",\"nick_name\":\"nickName\"}";
  17. ObjectMapper mapper = new ObjectMapper();
  18. Person person = JsonUtils.jsonToTNonNullSnake(json, Person.class);
  19. System.out.println(person);
  20. }
  21. @Test
  22. public void testJsonToBean_Gson() {
  23. String json = "{\"id\":1,\"name\":\"name\",\"nick_name\":\"nickName\"}";
  24. String json2 = "{\"id\":1,\"name\":\"name\",\"age\":18},\"nickName\":\"nickName\"}";
  25. ObjectMapper mapper = new ObjectMapper();
  26. Person person = JsonUtils.jsonToTG(json, Person.class);
  27. System.out.println(person);
  28. Person person2 = JsonUtils.jsonToTG(json2, Person.class);
  29. System.out.println(person2);
  30. }

安全

JSON Injection

发表评论

表情:
评论列表 (有 0 条评论,141人围观)

还没有评论,来说两句吧...

相关阅读

    相关 javaObject

    一、       Java面向对象 从客观系统的描述分类,程序设计语言分为面向过程语言和面向对象语言。面向过程语言以“数据结构+算法”程序设计范式构成,如Basic,c等。