gson
大佬让我用gson来生成json数据返回给前端。
gson生成的json会自动把为null的K-V给去除。当然也可以设置不忽略null值。
gson还有很多方式来制定返回的json格式。
重新认识一个强大的 Gson - 软件测试技术的文章 - 知乎
业务层代码
public class staticpro {
public static List<Menus> list = new ArrayList<>();
public static String buildJson(){
Menus m = null;
for (int i=1; i<=10; i++){
String menuName = null;
switch (i){
case 1: menuName="办公";break;
case 2: menuName="交流";break;
case 3: menuName="销售";break;
case 4: menuName="采购";break;
case 5: menuName="仓储";break;
case 6: menuName="项目";break;
case 7: menuName="服务";break;
case 8: menuName="人事";break;
case 9: menuName="财务";break;
case 10: menuName="报表";break;
}
m = new Menus(i, menuName, null, 0, 1);
list.add(m);
}
String json = new Gson().toJson(list); // 直接匿名构造
return json;
}
}
控制器层代码:发现返回的json数据,会一直重复调用。
是因为业务层的方法每次访问都会list.add。所以json数据会一直重复添加。
想让这个方法只调用一次。
方法1:设置一个全局标记位
@RestController
@RequestMapping("/menus")
public class MenuController {
@Autowired
MenuService menuService;
private static boolean flag = false;
private static String json;
@RequestMapping("listPreMenus")
public String listMenu(){
if (!flag){
json = staticpro.buildJson();
flag = !flag;
}
return json;
}w
}
方法2:重写springboot的run方法,类用Component注解标注,实现CommandLineRunner接口,重写它的run方法。
这样在类加载的时候就会运行指定方法。不用再添加标志位判断是否已经运行过该方法。
springboot启动并执行特定方法 - 简书
@Component
public class staticpro implements CommandLineRunner{
public static List<Menus> list = new ArrayList<>();
private static String json;
public static String buildJson(){
return json;
}
@Override
public void run(String... args) throws Exception {
Menus m = null;
for (int i=1; i<=10; i++){
String menuName = null;
switch (i){
case 1: menuName="办公";break;
case 2: menuName="交流";break;
case 3: menuName="销售";break;
case 4: menuName="采购";break;
case 5: menuName="仓储";break;
case 6: menuName="项目";break;
case 7: menuName="服务";break;
case 8: menuName="人事";break;
case 9: menuName="财务";break;
case 10: menuName="报表";break;
}
m = new Menus(i, menuName, null, 0, 1);
list.add(m);
}
json = new Gson().toJson(list);
}
}
返回的json:
[{"menuId":1,"menuName":"办公","preMenuId":0,"menuType":1},{"menuId":2,"menuName":"交流","preMenuId":0,"menuType":1},{"menuId":3,"menuName":"销售","preMenuId":0,"menuType":1},{"menuId":4,"menuName":"采购","preMenuId":0,"menuType":1},{"menuId":5,"menuName":"仓储","preMenuId":0,"menuType":1},{"menuId":6,"menuName":"项目","preMenuId":0,"menuType":1},{"menuId":7,"menuName":"服务","preMenuId":0,"menuType":1},{"menuId":8,"menuName":"人事","preMenuId":0,"menuType":1},{"menuId":9,"menuName":"财务","preMenuId":0,"menuType":1},{"menuId":10,"menuName":"报表","preMenuId":0,"menuType":1}]
前段解析gson生成的json:
$.get(menuUrl, function(result){
$("#headMenuUl").each(function(){
// var json = eval(result); 第一种实现用eval()函数:计算某个字符串,并执行其中的的 JavaScript 代码。
var json = JSON.parse(result); // 第二种实现jQuery的parse: 以 JSON 格式接收到数据,将其转换为 JavaScript 对象
$("#headMenuUl").empty();
var length = json.length;
for (var i=0; i<length; i++){ // 对象[i].属性的方式拿值
$("#headMenuUl").append("<li class='layui-nav-item' data-id="+ json[i].menuId + "><a href='javascript:;'>"+ json[i].menuName +"</a></li> ")
}
})
})