JSON数据的封装

JSON数据的封装

前言:

前后端分离已成为互联网项目开发的业界标准使用方式,采用前后端分别部署的方式,前端服务器(Nginx)部署前端页面,后端服务器部署业务逻辑组件,这样做的好处是可以分别搭建服务集群(可以采用分布式架构),以便于提升系统的并发处理能力,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础。

核心思想是前端html页面通过ajax调用后端的restuful api接口并使用json数据进行交互。

下面我为大家讲解一下如何将从数据库查询的数据封装成json数据并提供给前端人员或安卓开发人员使用

一.准备工作

  1. 后台系统架构的搭建,可以选择多种方式(例如:原生servlet+jdbc,ssh框架,ssm框架,springBoot等等),本文使用的使ssm项目架构。
  2. 本文使用的是maven工具对项目进行管理。
  3. 所用到的依赖坐标
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.47</version>
</dependency>

4.本文已查询所有用户信息封装成json数据为例

二.代码书写

  1. 书写工具类(抛出json数据格式工具类—Json.java)
/**
 * 抛出json数据格式
 */
public class Json {
    public static void toJson(Result result, HttpServletResponse response) throws Exception {
        response.setContentType("text/json");
        response.setHeader("Cache-Control", "no-cache");
        response.setCharacterEncoding("UTF-8");
        PrintWriter writer = response.getWriter();
        String json = JSONObject.toJSONString(result, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullNumberAsZero, SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullBooleanAsFalse, SerializerFeature.DisableCircularReferenceDetect);
        writer.write(json);
        writer.close();
    }

}

2.编写数据返回实体(Result.jsva)
附带注释

/**
 * 数据返回实体
 */
public class Result {

    private Integer code;//状态码

    private Boolean isSuccess;//状态

    private String massege;//消息

    private Object result;//数据对象

    /**
     * 无参构造器
     */
    public Result() {
        super();
    }

    /**
     * 只返回状态,状态码,消息     * @param statu     * @param code  * @param massege
     */
    public Result(Boolean success, Integer code, String massege) {
        super();
        this.isSuccess = success;
        this.code = code;
        this.massege = massege;
    }

    /**
     * 只返回状态,状态码,数据对象   * @param statu     * @param code  * @param object
     */
    public Result(Boolean success, Integer code, Object result) {
        super();
        this.isSuccess = success;
        this.code = code;
        this.result = result;
    }

    /**
     * 返回全部信息即状态,状态码,消息,数据对象    * @param statu     * @param code  * @param massege   * @param result
     */
    public Result(Boolean success, Integer code, String massege, Object result) {
        super();
        this.isSuccess = success;
        this.code = code;
        this.massege = massege;
        this.result = result;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public Boolean getIsSuccess() {
        return isSuccess;
    }

    public void setIsSuccess(Boolean isSuccess) {
        this.isSuccess = isSuccess;
    }

    public String getMassege() {
        return massege;
    }

    public void setMassege(String massege) {
        this.massege = massege;
    }

    public Object getResult() {
        return result;
    }

    public void setResult(Object result) {
        this.result = result;
    }

}

3.控制层代码书写
逻辑步骤:

  • 调用业务层查询所有对象方法得到返回值记作:list
  • 创建ArrayList数组用于存储数据对象得到返回值记作:ArrayList
  • 遍历list并把list封装进ArrayList
  • 创建数据返回实体对象并传入对应参数得到返回值记作:result
  • 设置request相应格式
  • 调用Json.toJson(参数一(result), 参数二(ArrayList));并传入对应参数

代码书写:

@RequestMapping("/findAll")
public ModelAndView findAllAccount(HttpServletResponse response) throws Exception {
    System.out.println("test");
    List<Admin> findall = adminService.findall();
    //封装json数据
    List<Admin> adminList = new ArrayList<Admin>();
    for (int i = 0; i < findall.size(); i++) {
        Admin admin = new Admin();
        admin.setName(findall.get(i).getName());
        admin.setSex(findall.get(i).getSex());
        admin.setAge(findall.get(i).getAge());
        admin.setPhone(findall.get(i).getPhone());
        adminList.add(admin);
      
 }

    Result result = new Result(true, 200, "成功", adminList);
    response.setContentType("text/html;charset=utf-8");
    Json.toJson(result, response);
    ModelAndView mav = new ModelAndView();
    mav.setViewName("success");
    mav.addObject("list", result);
    return mav;
}

注意:此处使用的使ssm框架注解

4.效果图

{"code":200,"isSuccess":true,"massege":"成功","result":[{"age":"21","id":0,"name":"张三","phone":"18717171","sex":"男"},{"age":"18","id":0,"name":"张三","phone":"1234456","sex":"男"},{"age":"18","id":0,"name":"张三","phone":"1234456","sex":"男"},{"age":"18","id":0,"name":"张三","phone":"1234456","sex":"男"},{"age":"18","id":0,"name":"张三","phone":"1234456","sex":"男"},{"age":"18","id":0,"name":"张三","phone":"1234456","sex":"男"},{"age":"18","id":0,"name":"张三","phone":"1234456","sex":"男"},{"age":"18","id":0,"name":"张三","phone":"1234456","sex":"男"}]}

在这里插入图片描述
总结:没有教程似的训导,更多的是说故事般的娓娓道来。学无止境,望诸君继续努力。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值