我们知道,在项目开发中,离不开json数据,前后端之间最常见就是用json数据进行通信,在这里,我选择fastjson进行讲解。
1.fastjson的优势
json解析非常快,再者使用方便,国人企业发明,支持一下。
2.fastjson导入依赖
打开pom.xml,在dependencies里添加以下依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.35</version>
</dependency>
然后点击右下角弹出的提示框中Import Changes即可
3.fastjson配置
我们查询数据时,查询出的数据很可能是一个null值,对于json来说null值并不友好,所以我们需要进一步处理null值。
因为fastjson对null处理需要重写WebMvcConfigurationSupport中的configureMessageConverters方法,所以我们在使用前进行配置。
首先在com.example.cxdemo下创建一个名叫config包,然后创建一个FJsonConfig类
在里面添加如下内容:
@Configuration public class FJsonConfig { @Bean public HttpMessageConverter configureMessageConverters() { FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); FastJsonConfig config = new FastJsonConfig(); config.setSerializerFeatures( // 保留map空的字段 SerializerFeature.WriteMapNullValue, // 将String类型的null转成"" SerializerFeature.WriteNullStringAsEmpty, // 将Number类型的null转成0 SerializerFeature.WriteNullNumberAsZero, // 将List类型的null转成[] SerializerFeature.WriteNullListAsEmpty, // 将Boolean类型的null转成false SerializerFeature.WriteNullBooleanAsFalse, // 避免循环引用 SerializerFeature.DisableCircularReferenceDetect); converter.setFastJsonConfig(config); converter.setDefaultCharset(Charset.forName("UTF-8")); List<MediaType> mediaTypeList = new ArrayList<>(); // 解决中文乱码问题,相当于在Controller上的@RequestMapping中加了个属性produces = "application/json" mediaTypeList.add(MediaType.APPLICATION_JSON); converter.setSupportedMediaTypes(mediaTypeList); return converter; } }
4.fastjson测试
我们创建一个util包,然后在创建JsonResult类,这个类用于规范返回前台的信息传递,相当于模板。
然后我们进行测试:
先创建pojo包,然后创建一个user类
FastJson根据配置文件会被配置进项目中,
@RestController等于spring的@ResponseBody和@Controller
@ResponseBody则是会被返回json数据,也就是默认调用了我们的FastJson
在com.example.cxdemo.controller中创建FJsonController类,添加如下代码:
@RestController
@RequestMapping(value="/fjson",produces = "application/json")
public class FJsonController {
@RequestMapping("/common")
public JsonResult getFJsonString() {
String str="stringTest";
JsonResult jr=new JsonResult();
jr.setObj(str);
jr.setCode(408);
jr.setMsg("基本类型测试");
return jr;
}
@RequestMapping("/array")
public JsonResult getArray() {
Object[] objs=new Object[5];
objs[0]=new User("小明", "123");
objs[1] = new User("小芳", "123");
objs[2]="数组添加数据";
objs[3]=1;
objs[4]=true;
JsonResult jr=new JsonResult();
jr.setObj(objs);
jr.setMsg("数组测试");
return jr;
}
@RequestMapping("/list")
public JsonResult getList() {
List<User> ul = new ArrayList<>();
User u = new User("小明", "123");
User u1 = new User("小芳", "123");
ul.add(u);
ul.add(u1);
JsonResult jr=new JsonResult();
jr.setObj(ul);
jr.setMsg("list测试");
return jr;
}
@RequestMapping("/map")
public JsonResult getMap() {
Map<String, Object> map = new HashMap<>(2);
User u = new User("小明", "123");
map.put("用户信息", u);
map.put("用户需求", "喝杯奶茶");
JsonResult jr=new JsonResult();
jr.setObj(map);
jr.setMsg("map测试");
return jr;
}
}
http://localhost:8080/fjson/common
返回结果:{"code":408,"msg":"基本类型测试","obj":"stringTest"}
http://localhost:8080/fjson/array
返回结果:{"code":0,"msg":"数组测试","obj":[{"password":"123","username":"小明"},{"password":"123","username":"小芳"},"数组添加数据",1,true]}
http://localhost:8080/fjson/list
返回结果:{"code":0,"msg":"list测试","obj":[{"password":"123","username":"小明"},{"password":"123","username":"小芳"}]}
http://localhost:8080/fjson/map
返回结果:{"code":0,"msg":"map测试","obj":{"用户信息":{"password":"123","username":"小明"},"用户需求":"喝杯奶茶"}}