【给客户端返回json格式数据的封装】1.code(消息号) 2.data(泛型数据) 3.fastjson 4.snappy压缩string字符串

pom.xml

 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>

1)fastjson基本封装和使用案例

JsonService.java(包装json)

package org.example.json;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;

public class JsonService {

    /**
     * 通过传入的key value构建json
     */
    public static JSONObject buildJSON(Object... objs) {
        JSONObject dataObj = new JSONObject();
        if (objs.length % 2 != 0) {
            System.err.println("参数错误");
            return dataObj;
        }
        for (int i = 0; i < objs.length; i += 2) {
            Object key = objs[i];
            Object value = objs[i + 1];
            dataObj.put((String) key, value);
        }
        return dataObj;
    }

    /**
     * 返回给客户端的JSON
     */
    public static String toClientString(Object obj) {
        return JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect);
    }
}

ResponseService.java(构建返回值)

package org.example.json;

import com.alibaba.fastjson.JSONObject;

public class ResponseService {
    public static <T> JSONObject buildResponse(int code, T data) {
        return JsonService.buildJSON("code", code, "data", data);
    }
}

Role.java(model数据层)

package org.example.json;

public class Role {
    private int rid;
    private String name;

    public Role(int rid, String name) {
        this.rid = rid;
        this.name = name;
    }

    public int getRid() {
        return rid;
    }

    public void setRid(int rid) {
        this.rid = rid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Main.java(使用)

package org.example.json;

import com.alibaba.fastjson.JSONObject;

public class Main {
    public static void main(String[] args) {
        JSONObject jo = ResponseService.buildResponse(-1, null);
        System.out.println(jo);

        JSONObject jo1 = ResponseService.buildResponse(200, new Role(100,"jn"));
        System.out.println(jo1);
    }
}

/*
{"code":-1}
{"code":200,"data":{"name":"jn","rid":100}}
 */

这样子,可以包装任何类型的数据返回给客户端了

2)用snappy对json进行压缩

pom.xml

    <dependency>
            <groupId>org.xerial.snappy</groupId>
            <artifactId>snappy-java</artifactId>
            <version>1.1.8.4</version>
        </dependency>

SnappyService.java

package org.example.compress;

import org.xerial.snappy.Snappy;

import java.io.IOException;

public class SnappyService {
    public static byte[] compress(String str) {
        try {
            return Snappy.compress(str);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String uncompress(byte[] bytes) {
        try {
            return Snappy.uncompressString(bytes);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

Main.java

package org.example.compress;

import com.alibaba.fastjson.JSONObject;
import org.example.json.JsonService;
import org.example.json.Role;

public class Main {
    public static void main(String[] args) {
        JSONObject jo = JsonService.buildJSON("a", 1, "role", new Role(1, "jianan"), "role1", new Role(1, "jianan"), "role2", new Role(1, "jianan"), "role3", new Role(1, "jianan"));
        String str = jo.toString();
        System.out.println("压缩前长度=" + str.getBytes().length);

        byte[] compress = SnappyService.compress(str);
        System.out.println("压缩后长度=" + compress.length);
        System.out.println("压缩后内容=" + new String(compress));

        String strNew = SnappyService.uncompress(compress);
        System.out.println("压缩解后长度=" + strNew.getBytes().length);
        System.out.println(strNew);


    }
}

/*
压缩前长度=142
压缩后长度=61
压缩后内容=��{"a":1,"role1":{"name":"jianan","rid":1},"�!  2�"  3j"  }
压缩解后长度=142
{"a":1,"role1":{"name":"jianan","rid":1},"role":{"name":"jianan","rid":1},"role2":{"name":"jianan","rid":1},"role3":{"name":"jianan","rid":1}}
 */

可以看出,有重复数据的,还是能起到比较大的压缩作用的

==========

List和json转换

    public static void list2Json(){
        // List序列化
        List<String> list = new ArrayList<String>();
        list.add("北京");
        list.add("上海");
        list.add("广州");
        list.add("深圳");

        // step1: list转json
        String json = JSON.toJSONString(list);
        System.out.println("序列化 List to JSON -> ");
        System.out.println(json);

        // step2:List反序列化
        list = (List)JSON.parseObject(json,List.class);
        System.out.println("反序列化 List内容 -> ");
        System.out.println(list);
    }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值