4.SpringBoot使用FastJson

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

 

  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值