且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何解析Json数据 | 带你读《SpringBoot实战教程》之十二

更新时间:2022-06-15 23:31:07

上一篇:详解访问静态资源 | 带你读《SpringBoot实战教程》之十一
下一篇:定义全局异常处理器 | 带你读《SpringBoot实战教程》之十三

本文来自于千锋教育在阿里云开发者社区学习中心上线课程《SpringBoot实战教程》,主讲人杨红艳,点击查看视频内容

使用FastJson解析Json数据

SpringBoot默认配置的是Jackson。
自定义使用FastJson解析Json数据,添加依赖:

<!-- fastjson的依赖 -->
      <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.15</version>
 </dependency>

配置FastJson有两种方式:
第一种:让启动类继承WebMvcConfigurerAdapter

public class SpringApplications extends WebMvcConfigurerAdapter {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        //创建FastJSON的消息转换器
        FastJsonHttpMessageConverter convert = new FastJsonHttpMessageConverter();
        //创建FastJSON的配置对象
        FastJsonConfig config = new FastJsonConfig();
       //对Json数据进行格式化
        config.setSerializerFeatures(SerializerFeature.PrettyFormat);

        convert.setFastJsonConfig(config);
        converters.add(convert);
    }
}

创建一个Person的实体类:

public class Person {

    private int id;
    private String name;
    private Date date;

    //set,get方法略
}

Controller:

@Controller
public class TestController {

    @RequestMapping("/person")
    @ResponseBody
    public Object show() {

        Person ren = new Person();
        ren.setId(66);
        ren.setName("赵六");
        ren.setDate(new Date());
        return ren;
    }  

}

在启动类中添加需要扫描的包:

@SpringBootApplication(scanBasePackages="com.qianfeng.controller")

执行结果:
如何解析Json数据 | 带你读《SpringBoot实战教程》之十二

乱码解决:把springboot的response编码设置为utf-8这个功能开启就好。
全局配置文件中添加:

spring.http.encoding.force=true

如何解析Json数据 | 带你读《SpringBoot实战教程》之十二
在定义的date上添加注解,来确定是使用FastJson解析Json数据的。

    @JSONField(format="yyyy-MM-dd HH")

如何解析Json数据 | 带你读《SpringBoot实战教程》之十二

第二种:@Bean注入

    @Bean
    public HttpMessageConverters fastJsonHttpMessageConverters()
    {
        FastJsonHttpMessageConverter convert = new FastJsonHttpMessageConverter();
        FastJsonConfig config = new FastJsonConfig();
        config.setSerializerFeatures(SerializerFeature.PrettyFormat);
        convert.setFastJsonConfig(config);
        
        HttpMessageConverter<?> con=convert;
        return new HttpMessageConverters(con);
    }

执行结果:
如何解析Json数据 | 带你读《SpringBoot实战教程》之十二

19.自定义拦截器

有些时候我们需要自已配置SpringMVC而不是采用默认,比如说增加一个拦截器,这个时候就得通过继承WebMvcConfigurerAdapter然后重写父类中的方法进行扩展。

首先创建一个定义拦截器的包:
如何解析Json数据 | 带你读《SpringBoot实战教程》之十二
在下面创建一个拦截器
如何解析Json数据 | 带你读《SpringBoot实战教程》之十二
自行定义拦截器:

@Configuration
public class MyInterceptor extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        HandlerInterceptor handlerInterceptor=new HandlerInterceptor() {
            
            @Override
            public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
                System.out.println("自定义拦截器.....");
                return true;
            }
            
            @Override
            public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
                    throws Exception {
                // TODO Auto-generated method stub
                
            }
            
            @Override
            public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
                    throws Exception {
                // TODO Auto-generated method stub
                
            }
        };
        
        registry.addInterceptor(handlerInterceptor).addPathPatterns("/**");
    }

我们需要SpringBoot扫描到这个拦截器,所有需要在此处指明所在的包:

@SpringBootApplication(scanBasePackages={"com.qianfeng.controller","com.qianfeng.interceptor"})

测试拦截器是否好用,我们通过访问路径,看控制台是否打印了这个自定义拦截器,说明拦截器起作用了。
如何解析Json数据 | 带你读《SpringBoot实战教程》之十二