一、引入依赖
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.32</version>
</dependency>
二、读取yaml内容工作代码
(1)上传yaml文件
读取yaml文件并校验
package com.util;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.parser.ParserException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class YmlTransUtil {
/**
* 读取并校验语法 yaml
*
* @param file 需要读取的文件
* @return Map
*/
public static Map getReadAbleYaml(File file) {
Map obj = new HashMap();
try (FileInputStream ins = new FileInputStream(file)) {
Yaml yaml = new Yaml();
obj = yaml.load(ins);
} catch (FileNotFoundException exception) {
log.error("yaml文件不存在", exception);
obj.put("error", "yaml文件不存在");
} catch (ParserException exception) {
log.error("yaml文件格式错误!", exception);
obj.put("error", "yaml文件格式错误!\n" + exception.getMessage());
} catch (Exception exception) {
log.error("getReadAbleYaml error: ", exception);
}
return obj;
}
}
(2) 根据yaml文件路径
src.resource 下的yaml文件
package com.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.io.Resources;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.parser.ParserException;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class YamlUtil {
/**
* 读取 ymal
*
* @param path 需要读取的文件路径
* @return Map
*/
public static Map getReadAbleYaml(String path) {
Map obj = new HashMap();
try( InputStream ins = Resources.getResourceAsStream(path)) {
Yaml yaml = new Yaml();
obj = yaml.load(ins);
} catch (FileNotFoundException exception){
log.error("yaml文件不存在");
obj.put("error", "yaml文件不存在");
} catch (ParserException exception){
log.error("yaml文件格式错误!");
log.error(exception.getMessage());
obj.put("error", "yaml文件格式错误!\n" + exception.getMessage());
} catch (Exception exception) {
log.error(exception.getMessage());
}
return obj;
}
}
三、应用代码
(1)上传yaml文件
java
@RequestMapping(value = "/getYamlInfo", method = RequestMethod.POST)
public RestResponse getYamlInfo(@RequestParam(value = "file") MultipartFile file) {
RestResponse restResponse = new RestResponse();
if (file == null) {
log.info("getYamlInfo error: file is not empty.");
return RestResponse.setErrorResponse(restResponse, "getYamlInfo error: file is not empty.");
}
try {
// 校验合法性
File newFile = File.createTempFile("temp", ".yml");
file.transferTo(newFile);
Map properties = YmlTransUtil.getReadAbleYaml(newFile);
if (properties.get("error") != null) {
return RestResponse.setErrorResponse(restResponse, properties.get("error").toString());
}
} catch (Exception exception) {
log.error("getYamlInfo error.", exception);
return RestResponse.setErrorResponse(restResponse, "getYamlInfo error.");
}
return restResponse;
}
(2)读取项目src.resource下的yaml
Map properties = YamlUtil.getReadAbleYaml("text.yml");