我们知道,在项目开发中,离不开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":"小明"},"用户需求":"喝杯奶茶"}}

 

Logo

基于 Vue 的企业级 UI 组件库和中后台系统解决方案,为数万开发者服务。

更多推荐