首页 > 解决方案 > 如何将 JSON 从静态文件传递到休息控制器 SpringBoot App

问题描述

我有一个运行稳定的 SpringBoot 项目。我想添加一个端点,它从类路径读取 json 文件并将其传递给响应,而无需创建任何模型对象(通过)。

我没有问题将 json 文件读入 JsonNode 或 ObjectNode,我正在努力下一步去哪里设置我的响应对象中的数据。

稍后添加此警告,我确实需要从数据库更新 json。

标签: javarestspring-bootfasterxml

解决方案


好的,与工作中的同事配对,我们尝试了两件事,返回一个字符串(在 REST 输出中转义字符串 - 返回一个大字符串。)不好。有效的方法是将响应对象设置为 a 并调用 mapper.readValue(jsonFeed, Map.class),它以正确的对象表示法返回 JSON。

    @Value("${metadata.json.file}") //defined in application.context
    private Resource metaJsonFileName;

    public String getJsonFromFile(List<UnitUiItem> uiitems){
        JsonNode root;
        ObjectMapper mapper = new ObjectMapper();
        InputStream stream = metaJsonFileName.getInputStream();

        root = mapper.readTree(stream);
        JsonNode dataNode = root.get("data");
        JsonNode optionDataNode = dataNode.get("storelocation");

        ((ObjectNode)optionDataNode).putArray("units");
       for(UnitUiItem item : uiitems){
        JsonNode unitNode = ((ObjectNode)optionDataNode).withArray("units").addObject();
        ((ObjectNode)unitNode).put("code",item.getCode());
        ((ObjectNode)unitNode).put("displayName",item.getDisplayName());
    }

    LOGGER.info("buildMetaJson exit");
    return root.toString();
    }

    //calling method
    String jsonFeed = getJsonFromFile();
    ObjectMapper mapper = new ObjectMapper();
    response.setData(mapper.readValue(jsonFeed, Map.class));

我有一些代码清理工作.. 有什么更简洁的方法吗?


推荐阅读