java - 如何将 JSON 从静态文件传递到休息控制器 SpringBoot App
问题描述
我有一个运行稳定的 SpringBoot 项目。我想添加一个端点,它从类路径读取 json 文件并将其传递给响应,而无需创建任何模型对象(通过)。
我没有问题将 json 文件读入 JsonNode 或 ObjectNode,我正在努力下一步去哪里设置我的响应对象中的数据。
稍后添加此警告,我确实需要从数据库更新 json。
解决方案
好的,与工作中的同事配对,我们尝试了两件事,返回一个字符串(在 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));
我有一些代码清理工作.. 有什么更简洁的方法吗?
推荐阅读
- mysql - Python查询2或参数中的Mysql
- c# - 从 vue 引导按钮调用方法会停止页面渲染
- reactjs - Not able to handle change/click on inner elements (displyed using onRenderField) of ChoiceGroup in office-ui-fabric-react
- java - 我们可以仅在加载彼此之后添加一个 Maven 依赖项吗?
- bash - 有没有办法在这种情况下只需要一个回声?
- reactjs - 反应 js + laravel 部署
- css - 对角线 SVG 行程
- c++ - CublasLt cublasLtMatmulAlgoGetHeuristic 为行主矩阵返回 CUBLAS_STATUS_INVALID_VALUE
- python - Pony orm 连接池
- javascript - 在 JS 中将 webm 容器更改为 mp4 视频客户端的任何等效于“-c:v copy”的方法?