使用Java对返回的结果,封装成指定JSON格式的数据类型
1、如果任务下来了,并且给定了你指定格式的JSON数据类型,那么就要想法封装成此种JSON格式的数据类型,方便其他成员进行调用,那么是如何进行封装的呢,这里简单研究一下子。
2、如果文档指定的封装类型是下面,这样格式的,应该如何进行封装呢?
- 1 {
- 2 "code": 0,
- 3 "msg": "success",
- 4 "data": {
- 5 "id": 2,
- 6 "account": "张三",
- 7 "cname": "张三",
- 8 "sex": "男",
- 9 "password": "123456",
- 10 "identity": "415555555555555552",
- 11 "telephone": "15255555555",
- 12 "address": "河南省商丘市",
- 13 "birthday": "1999-06-15",
- 14 "identification": "1"
- 15 }
- 16 }
2.1、那么可以封装一个工具类,定义三个参数,分别是code、msg、data(这里使用的是Object类型的,你也可以设置成泛型的,看自己的喜好了)。然后创建几个调用成功,失败,或者自己构建一个方法,将参数传递进去即可。
- 1 package com.bie.demo.utils;
- 2
- 3 import com.fasterxml.jackson.databind.JsonNode;
- 4 import com.fasterxml.jackson.databind.ObjectMapper;
- 5
- 6 import java.io.Serializable;
- 7 import java.util.List;
- 8
- 9 /**
- 10 * @ProjectName:
- 11 * @Package:
- 12 * @ClassName:
- 13 * @Author:
- 14 * @Description: ${description}
- 15 * @Date: 2020/2/28 10:40
- 16 * @Version: 1.0
- 17 */
- 18 public class NationalPolicyResult implements Serializable {
- 19
- 20 /**
- 21 *
- 22 */
- 23 private static final long serialVersionUID = 1L;
- 24
- 25 // 定义jackson对象
- 26 private static final ObjectMapper MAPPER = new ObjectMapper();
- 27
- 28 // 返回标记,成功标记为0,失败为1
- 29 private Integer code;
- 30
- 31 // 返回消息
- 32 private String msg;
- 33
- 34 // 返回中的数据
- 35 private Object data;
- 36
- 37 /**
- 38 * 1、成功返回调用的方法
- 39 *
- 40 * @param data
- 41 * @return
- 42 */
- 43 public static NationalPolicyResult success(Object data) {
- 44 return new NationalPolicyResult(data);
- 45 }
- 46
- 47 /**
- 48 * 2、成功返回调用的方法,重载方法
- 49 *
- 50 * @return
- 51 */
- 52 public static NationalPolicyResult success() {
- 53 return new NationalPolicyResult(null);
- 54 }
- 55
- 56
- 57 /**
- 58 * 3、传入封装的数据,返回标记和返回信息进行默认
- 59 *
- 60 * @param data
- 61 */
- 62 public NationalPolicyResult(Object data) {
- 63 this.code = 0;
- 64 this.msg = "success";
- 65 this.data = data;
- 66 }
- 67
- 68 /**
- 69 * 4、无参的构造方法
- 70 */
- 71 public NationalPolicyResult() {
- 72
- 73 }
- 74
- 75 /**
- 76 * 5、自己构建一个方法,调用构造方法,返回自己封装的状态,返回信息,和封装的数据信息
- 77 *
- 78 * @param code
- 79 * @param msg
- 80 * @param data
- 81 * @return
- 82 */
- 83 public static NationalPolicyResult build(Integer code, String msg, Object data) {
- 84 return new NationalPolicyResult(code, msg, data);
- 85 }
- 86
- 87 /**
- 88 * 6、自己构建一个方法,重载,调用构造方法,默认封装的数据信息为null
- 89 *
- 90 * @param code
- 91 * @param msg
- 92 * @return
- 93 */
- 94 public static NationalPolicyResult build(Integer code, String msg) {
- 95 return new NationalPolicyResult(code, msg, null);
- 96 }
- 97
- 98 /**
- 99 * 7、可以传入封装的数据,和封装的信息,失败或者成功
- 100 *
- 101 * @param data
- 102 * @param msg
- 103 */
- 104 public NationalPolicyResult(Object data, String msg) {
- 105 this.code = 0;
- 106 this.msg = msg;
- 107 this.data = data;
- 108 }
- 109
- 110
- 111 /**
- 112 * 8、含参的构造方法
- 113 *
- 114 * @param code
- 115 * @param msg
- 116 * @param data
- 117 */
- 118 public NationalPolicyResult(Integer code, String msg, Object data) {
- 119 this.code = code;
- 120 this.msg = msg;
- 121 this.data = data;
- 122 }
- 123
- 124 public Integer getCode() {
- 125 return code;
- 126 }
- 127
- 128 public void setCode(Integer code) {
- 129 this.code = code;
- 130 }
- 131
- 132 public String getMsg() {
- 133 return msg;
- 134 }
- 135
- 136 public void setMsg(String msg) {
- 137 this.msg = msg;
- 138 }
- 139
- 140 public Object getData() {
- 141 return data;
- 142 }
- 143
- 144 public void setData(Object data) {
- 145 this.data = data;
- 146 }
- 147
- 148
- 149 /**
- 150 * 将json结果集转化为NationalPolicyResult对象
- 151 *
- 152 * @param jsonData json数据
- 153 * @param clazz NationalPolicyResult中的object类型
- 154 * @return
- 155 */
- 156 public static NationalPolicyResult formatToPojo(String jsonData, Class<?> clazz) {
- 157 try {
- 158 if (clazz == null) {
- 159 return MAPPER.readValue(jsonData, NationalPolicyResult.class);
- 160 }
- 161 JsonNode jsonNode = MAPPER.readTree(jsonData);
- 162 JsonNode data = jsonNode.get("data");
- 163 Object obj = null;
- 164 if (clazz != null) {
- 165 if (data.isObject()) {
- 166 obj = MAPPER.readValue(data.traverse(), clazz);
- 167 } else if (data.isTextual()) {
- 168 obj = MAPPER.readValue(data.asText(), clazz);
- 169 }
- 170 }
- 171 return build(jsonNode.get("code").intValue(), jsonNode.get("msg").asText(), obj);
- 172 } catch (Exception e) {
- 173 return null;
- 174 }
- 175 }
- 176
- 177 /**
- 178 * 没有object对象的转化
- 179 *
- 180 * @param json
- 181 * @return
- 182 */
- 183 public static NationalPolicyResult format(String json) {
- 184 try {
- 185 return MAPPER.readValue(json, NationalPolicyResult.class);
- 186 } catch (Exception e) {
- 187 e.printStackTrace();
- 188 }
- 189 return null;
- 190 }
- 191
- 192 /**
- 193 * Object是集合转化
- 194 *
- 195 * @param jsonData json数据
- 196 * @param clazz 集合中的类型
- 197 * @return
- 198 */
- 199 public static NationalPolicyResult formatToList(String jsonData, Class<?> clazz) {
- 200 try {
- 201 JsonNode jsonNode = MAPPER.readTree(jsonData);
- 202 JsonNode data = jsonNode.get("data");
- 203 Object obj = null;
- 204 if (data.isArray() && data.size() > 0) {
- 205 obj = MAPPER.readValue(data.traverse(),
- 206 MAPPER.getTypeFactory().constructCollectionType(List.class, clazz));
- 207 }
- 208 return build(jsonNode.get("status").intValue(), jsonNode.get("msg").asText(), obj);
- 209 } catch (Exception e) {
- 210 return null;
- 211 }
- 212 }
- 213
- 214 }
2.2、将查询返回的结果进行封装返回,如果失败了,或者成功了,如何进行调用。如下所示:
- 1 package com.bie.demo.controller;
- 2
- 3 import com.bie.demo.po.CustomerInfo;
- 4 import com.bie.demo.service.CustomerInfoService;
- 5 import com.bie.demo.utils.NationalPolicyResult;
- 6 import org.springframework.beans.factory.annotation.Autowired;
- 7 import org.springframework.stereotype.Controller;
- 8 import org.springframework.web.bind.annotation.RequestMapping;
- 9 import org.springframework.web.bind.annotation.RequestParam;
- 10 import org.springframework.web.bind.annotation.ResponseBody;
- 11
- 12 /**
- 13 *
- 14 */
- 15 @Controller
- 16 @RequestMapping(value = "/customerInfo")
- 17 public class CustomerInfoController {
- 18
- 19 @Autowired
- 20 private CustomerInfoService customerInfoService;
- 21
- 22 @RequestMapping(value = "/selectCustomerInfoById")
- 23 @ResponseBody
- 24 public NationalPolicyResult selectCustomerInfoById(@RequestParam(value = "id") int id) {
- 25 CustomerInfo customerInfo = customerInfoService.selectCustomerInfoById(id);
- 26 NationalPolicyResult nationalPolicyResult = new NationalPolicyResult();
- 27 NationalPolicyResult result = null;
- 28 if (customerInfo != null) {
- 29 result = nationalPolicyResult.success(customerInfo);
- 30 } else {
- 31 result = nationalPolicyResult.build(1, "失败了.......");
- 32 }
- 33 return result;
- 34 }
- 35
- 36
- 37 }
2.3、页面调用一下,看看是否正确的返回结果。
使用json在线解析,查看是否是正确的json格式。
3、如果文档指定的封装类型是下面,这样格式的,应该如何进行封装呢?
- 1 {
- 2 "code": 0,
- 3 "msg": "success",
- 4 "data": {
- 5 "records": [{
- 6 "id": 1,
- 7 "account": "admin",
- 8 "cname": "admin",
- 9 "sex": "男",
- 10 "password": "123456",
- 11 "identity": "415555555555555551",
- 12 "telephone": "15255555555",
- 13 "address": "河南省新乡市",
- 14 "birthday": "1999-06-15",
- 15 "identification": "1"
- 16 }, {
- 17 "id": 2,
- 18 "account": "张三",
- 19 "cname": "张三",
- 20 "sex": "男",
- 21 "password": "123456",
- 22 "identity": "415555555555555552",
- 23 "telephone": "15255555555",
- 24 "address": "河南省商丘市",
- 25 "birthday": "1999-06-15",
- 26 "identification": "1"
- 27 }],
- 28 "total": 100,
- 29 "size": 20,
- 30 "current": 1,
- 31 "orders": [],
- 32 "searchCount": true,
- 33 "pages": 23
- 34 }
- 35 }
3.1、当然了,上面那个封装的也要接着使用,还需要再封装一个。那么可以再封装一个工具类,定义七个参数,分别是records、total、size、current、orders、searchCount、pages。
- 1 package com.bie.demo.utils;
- 2
- 3
- 4 import com.bie.demo.po.CustomerInfo;
- 5
- 6 import java.util.Arrays;
- 7 import java.util.List;
- 8
- 9 /**
- 10 *
- 11 */
- 12 public class CustomerInfoResult {
- 13
- 14 private List<CustomerInfo> records;
- 15 private long total;
- 16 private int size;
- 17 private int current;
- 18 private int[] orders;
- 19 private boolean searchCount;
- 20 private long pages;
- 21
- 22 public List<CustomerInfo> getRecords() {
- 23 return records;
- 24 }
- 25
- 26 public void setRecords(List<CustomerInfo> records) {
- 27 this.records = records;
- 28 }
- 29
- 30 public long getTotal() {
- 31 return total;
- 32 }
- 33
- 34 public void setTotal(long total) {
- 35 this.total = total;
- 36 }
- 37
- 38 public int getSize() {
- 39 return size;
- 40 }
- 41
- 42 public void setSize(int size) {
- 43 this.size = size;
- 44 }
- 45
- 46 public int getCurrent() {
- 47 return current;
- 48 }
- 49
- 50 public void setCurrent(int current) {
- 51 this.current = current;
- 52 }
- 53
- 54 public int[] getOrders() {
- 55 return orders;
- 56 }
- 57
- 58 public void setOrders(int[] orders) {
- 59 this.orders = orders;
- 60 }
- 61
- 62 public boolean isSearchCount() {
- 63 return searchCount;
- 64 }
- 65
- 66 public void setSearchCount(boolean searchCount) {
- 67 this.searchCount = searchCount;
- 68 }
- 69
- 70 public long getPages() {
- 71 return pages;
- 72 }
- 73
- 74 public void setPages(long pages) {
- 75 this.pages = pages;
- 76 }
- 77
- 78 @Override
- 79 public String toString() {
- 80 return "CustomerInfoResult{" +
- 81 "records=" + records +
- 82 ", total=" + total +
- 83 ", size=" + size +
- 84 ", current=" + current +
- 85 ", orders=" + Arrays.toString(orders) +
- 86 ", searchCount=" + searchCount +
- 87 ", pages=" + pages +
- 88 \'}\';
- 89 }
- 90 }
3.2、将查询返回的结果进行封装返回,最后再次进行封装,得到你想要的格式即可,如果失败了,或者成功了,如何进行调用。如下所示:
主要根据自己想要的格式进行封装哈。
- 1 package com.bie.demo.controller;
- 2
- 3 import com.bie.demo.po.CustomerInfo;
- 4 import com.bie.demo.service.CustomerInfoService;
- 5 import com.bie.demo.utils.CustomerInfoResult;
- 6 import com.bie.demo.utils.NationalPolicyResult;
- 7 import org.springframework.beans.factory.annotation.Autowired;
- 8 import org.springframework.stereotype.Controller;
- 9 import org.springframework.web.bind.annotation.RequestMapping;
- 10 import org.springframework.web.bind.annotation.RequestParam;
- 11 import org.springframework.web.bind.annotation.ResponseBody;
- 12
- 13 import java.util.List;
- 14
- 15 /**
- 16 *
- 17 */
- 18 @Controller
- 19 @RequestMapping(value = "/customerInfo")
- 20 public class CustomerInfoController {
- 21
- 22 @Autowired
- 23 private CustomerInfoService customerInfoService;
- 24
- 25
- 26 @RequestMapping(value = "/selectCustomerInfoAll")
- 27 @ResponseBody
- 28 public NationalPolicyResult selectCustomerInfoAll() {
- 29 // 查询返回所有的数据
- 30 List<CustomerInfo> customerInfos = customerInfoService.selectCustomerInfoAll();
- 31 // 封装指定的json格式数据
- 32 CustomerInfoResult customerInfoResult = new CustomerInfoResult();
- 33 customerInfoResult.setRecords(customerInfos);
- 34 customerInfoResult.setTotal(100);
- 35 customerInfoResult.setSize(20);
- 36 customerInfoResult.setCurrent(1);
- 37 customerInfoResult.setOrders(new int[0]);
- 38 customerInfoResult.setSearchCount(true);
- 39 customerInfoResult.setPages(23);
- 40
- 41 // 再次封装指定的json格式数据
- 42 NationalPolicyResult nationalPolicyResult = new NationalPolicyResult();
- 43 NationalPolicyResult result = null;
- 44 if (customerInfos != null && customerInfos.size() > 0 && !customerInfos.isEmpty()) {
- 45 result = nationalPolicyResult.success(customerInfoResult);
- 46 } else {
- 47 result = nationalPolicyResult.build(1, "失败了.......");
- 48 }
- 49 return result;
- 50 }
- 51 }
3.3、页面调用一下,看看是否正确的返回结果。
使用json在线解析,查看是否是正确的json格式。
那么快根据你的文档需求进行JSON封装吧。
作者:别先生
博客园:https://www.cnblogs.com/biehongli/
如果您想及时得到个人撰写文章以及著作的消息推送,可以扫描上方二维码,关注个人公众号哦。