上一篇:详解访问静态资源 | 带你读《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")
执行结果:
乱码解决:把springboot的response编码设置为utf-8这个功能开启就好。
全局配置文件中添加:
spring.http.encoding.force=true
在定义的date上添加注解,来确定是使用FastJson解析Json数据的。
@JSONField(format="yyyy-MM-dd HH")
第二种:@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);
}
执行结果:
19.自定义拦截器
有些时候我们需要自已配置SpringMVC而不是采用默认,比如说增加一个拦截器,这个时候就得通过继承WebMvcConfigurerAdapter然后重写父类中的方法进行扩展。
首先创建一个定义拦截器的包:
在下面创建一个拦截器
自行定义拦截器:
@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"})
测试拦截器是否好用,我们通过访问路径,看控制台是否打印了这个自定义拦截器,说明拦截器起作用了。