spring boot读取json菜单文件

网友投稿 275 2022-11-04


spring boot读取json菜单文件

一、设计思路 将菜单写在文件menu.json里,后台读取该文件,并将菜单输出到页面上。

二、技术点 1、读取JSON文件 2、序列化成实体数组 3、thymeleaf循环输出

三、具体描述1、menu.json

[{ "id": 1, "name": "home", "title": "首页", "url": "home/"},{ "id": 2, "name": "hyjj", "title": "知识经济", "url": "hyjj/"},{ "id": 3, "name": "fzjz", "title": "防灾减灾", "url": "fzjz/"},{ "id": 4, "name": "cgzh", "title": "成果转化", "url": ""}]

2、菜单项实体类

public class Menu { private int id; private String name; private String title; private String url; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getName() { return name; } public void setName(String name) { this.name = name; }}

3、读取菜单1)读取json文件静态类JsonUtils

import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.parser.Feature;import org.springframework.core.io.ClassPathResource;import java.io.IOException;import java.io.InputStream;import java.lang.reflect.Type;import java.nio.charset.StandardCharsets;import java.util.List;public class JsonUtils { public static T readSingle(String path, Type type) throws IOException { ClassPathResource resource = new ClassPathResource(path); if (resource.exists()) { return JSON.parseObject(resource.getInputStream(), StandardCharsets.UTF_8, type, // 自动关闭流 Feature.AutoCloseSource, // 允许注释 Feature.AllowComment, // 允许单引号 Feature.AllowSingleQuotes, // 使用 Big decimal Feature.UseBigDecimal); } else { throw new IOException(); } } public static List readArray(String path, Class t) throws IOException { ClassPathResource resource = new ClassPathResource(path); if (resource.exists()) { InputStream stream = resource.getInputStream(); byte[] bytes = new byte[stream.available()]; stream.read(bytes); return JSON.parseArray(new String(bytes), t); } else { throw new IOException(); } }}

2)调用JsonUtils

public List

getMenus() { try { return JsonUtils.readArray("static/data/menu.json", Menu.class); } catch (IOException e) { e.printStackTrace(); return null; } }

4、输出给前端

@Controller("homeIndexController")@RequestMapping(value = "/home")public class IndexController extends BaseController { @RequestMapping(value = "/") public String Index(Model model){ model.addAttribute("menus",getMenus());//getMenus见上面 return "home/index"; }}

5、前端展示

四、总结 重点在于读取JSON文件并序列化成实体数组这里。

我用到了fastjson,虽然支持泛型,但没有彻底,分为2种情况:一种就是输入内容为JSON对象({“id”:1,…}),一种是JSON数组([{“id”:1,…},{“id”:2,…},…])。在本例中,很显然是个数组。刚开始用JSON.parseObject,会报错。

感觉fastjson这个类有点怪,JSON.parseObject支持多种格式,编码,而JSON.parseArray只重载了几种情况。其次是调用JSON.parseArray如何传参遇到了点麻烦,从网上找例子,都不完整,颇感郁闷。所以我现在给出完整的例子。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:马云私服
下一篇:信用卡申请进度查询API(信用卡申请进度查询中心)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~