springboot(9)- 整合web开发(1)- json 解析

    技术2023-03-27  95

    1 springboot 默认 json 解析方案

    1.1 返回 json数据

    实体类

    Controller

    //@Controller @RestController public class UserController { @GetMapping("/getAll") // @ResponseBody public List<User> getAll() { List<User> users = new ArrayList<>(); for (int i = 0; i < 10; i++) { User user = new User(); user.setId(i); user.setUsername("Mike-" + i); user.setAddress("New York-" + i); users.add(user); } return users; } }

    1.2 HttpMessageConverter

    将服务端返回的对象序列化成 json字符串将前端传来的 json 字符串反序列化为 java 对象
    所有的 json 生成都离不开相关的 HttpMessageConverterSpringMVC 自动配置了 Jackson和Gson 的 HttpMessageConverter。springboot 又对此做了自动化的配置。所以如果用户使用 jackson 和 gson 的话,没有其他额外的配置,只需要添加依赖。

    1.3 演示

    实体类

    自定义转换类 package com.tzb.config; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.cbor.MappingJackson2CborHttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import java.text.SimpleDateFormat; import java.util.Date; @Configuration public class WebMvcConfig { @Bean MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); ObjectMapper om = new ObjectMapper(); om.setDateFormat(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")); converter.setObjectMapper(om); return converter; } }
    Controller //@Controller @RestController public class UserController { @GetMapping("/getAll") // @ResponseBody public List<User> getAll() { List<User> users = new ArrayList<>(); for (int i = 0; i < 10; i++) { User user = new User(); user.setId(i); user.setUsername("Mike-" + i); user.setAddress("New York-" + i); user.setBirthday(new Date()); users.add(user); } return users; } }


    1.3.1 修改

    自定义配置 @Configuration public class WebMvcConfig { /* @Bean MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); ObjectMapper om = new ObjectMapper(); om.setDateFormat(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")); converter.setObjectMapper(om); return converter; }*/ @Bean ObjectMapper objectMapper(){ ObjectMapper om = new ObjectMapper(); om.setDateFormat(new SimpleDateFormat("yyyy/MM/dd")); return om; } }

    2 使用 Gson 处理 json

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-json</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> </dependency>
    Controller //@Controller @RestController public class UserController { @GetMapping("/getAll") // @ResponseBody public List<User> getAll() { List<User> users = new ArrayList<>(); for (int i = 0; i < 10; i++) { User user = new User(); user.setId(i); user.setUsername("Mike-" + i); user.setAddress("New York-" + i); user.setBirthday(new Date()); users.add(user); } return users; } }

    2.1 自定义日期格式

    package com.tzb.config; import com.google.gson.GsonBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.json.GsonHttpMessageConverter; @Configuration public class WebMvcConfig { @Bean GsonHttpMessageConverter gsonHttpMessageConverter(){ GsonHttpMessageConverter converter = new GsonHttpMessageConverter(); converter.setGson(new GsonBuilder().setDateFormat("yyyy/MM/dd").create()); return converter; } }

    2.1.1 另一种方法

    @Configuration public class WebMvcConfig { /* @Bean GsonHttpMessageConverter gsonHttpMessageConverter(){ GsonHttpMessageConverter converter = new GsonHttpMessageConverter(); converter.setGson(new GsonBuilder().setDateFormat("yyyy/MM/dd").create()); return converter; } */ @Bean Gson gson() { return new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create(); } }

    3 fastjson

    依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-json</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.72</version> </dependency> @Configuration public class WebMvcConfig { @Bean FastJsonHttpMessageConverter fastJsonHttpMessageConverter() { FastJsonHttpMessageConverter conerter = new FastJsonHttpMessageConverter(); FastJsonConfig config = new FastJsonConfig(); config.setDateFormat("yyyy-MM-dd"); conerter.setFastJsonConfig(config); return conerter; } }

    Processed: 0.011, SQL: 9