如何将JSON从静态文件传递到Rest Controller SpringBoot App

时间:2019-04-26 20:38:02

标签: java rest spring-boot fasterxml

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

我没有将json文件读入JsonNode或ObjectNode的问题,我在为下一步在响应对象中设置数据而苦苦挣扎。

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

1 个答案:

答案 0 :(得分:0)

好吧,在工作中与一位同事配对,我们尝试了两件事,返回一个字符串(在REST输出中转义字符串-返回一个大的String。)不好。有效的方法是将响应对象设置为,并调用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));

我需要执行一些代码清理工作。任何更干净的方法可以做到这一点?