JSON数据的封装
前言:
前后端分离已成为互联网项目开发的业界标准使用方式,采用前后端分别部署的方式,前端服务器(Nginx)部署前端页面,后端服务器部署业务逻辑组件,这样做的好处是可以分别搭建服务集群(可以采用分布式架构),以便于提升系统的并发处理能力,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础。
核心思想是前端html页面通过ajax调用后端的restuful api接口并使用json数据进行交互。
下面我为大家讲解一下如何将从数据库查询的数据封装成json数据并提供给前端人员或安卓开发人员使用
一.准备工作
- 后台系统架构的搭建,可以选择多种方式(例如:原生servlet+jdbc,ssh框架,ssm框架,springBoot等等),本文使用的使ssm项目架构。
- 本文使用的是maven工具对项目进行管理。
- 所用到的依赖坐标
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
4.本文已查询所有用户信息封装成json数据为例
二.代码书写
- 书写工具类(抛出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":"男"}]}
总结:没有教程似的训导,更多的是说故事般的娓娓道来。学无止境,望诸君继续努力。