-
org.yaml -
snakeyaml -
1.32
读取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;
- }
- }
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;
- }
- }
- @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;
- }
Map properties = YamlUtil.getReadAbleYaml("text.yml");