zoukankan      html  css  js  c++  java
  • 使用 Java 执行 groovy 脚本或方法

    1. 引入依赖

     <dependency>
                <groupId>org.codehaus.groovy</groupId>
                <artifactId>groovy-all</artifactId>
                <version>${groovy.version}</version>
            </dependency>

    2. 使用 Java 执行 groovy 脚本

     @ApiOperation(notes = "测试 groovy 脚本与占位符", value = "测试 groovy 脚本与占位符")
        @GetMapping(path = "/test")
        public String test(@RequestParam("script") String script, @RequestParam("param") String param, @RequestParam("param2") String param2) {
            if (StringUtils.isEmpty(script)) {
                throw new RuntimeException("脚本不能为空");
            }
            log.info("script");
            try {
                ScriptEngineManager factory = new ScriptEngineManager();
                ScriptEngine engine = factory.getEngineByName("groovy");
                Bindings bindings = engine.createBindings();
                bindings.put("message", param);
                bindings.put("miao", param2);
                return engine.eval(script, bindings).toString();
            } catch (Exception e) {
                log.error(e.toString());
                return null;
            }
        }

    3. 使用 Java 执行 groovy 方法

    @ApiOperation(notes = "测试 groovy 函数", value = "测试 groovy 函数")
        @GetMapping(path = "/test2")
        public String test2(@RequestParam("script") String script, @RequestParam("func") String func, @RequestParam("param1") String param1, @RequestParam("param2") String param2) {
            if (StringUtils.isEmpty(script)) {
                throw new RuntimeException("脚本不能为空");
            }
            log.info(script);
            try {
                ScriptEngineManager factory = new ScriptEngineManager();
                ScriptEngine engine = factory.getEngineByName("groovy");
                engine.eval(script);
                Invocable inv = (Invocable) engine;
                return inv.invokeFunction(func, param1, param2).toString();
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }

  • 相关阅读:
    Navicat工具破解
    ios7开发者必知
    浏览器工作原理
    Lettcode_104_Maximum Depth of Binary Tree
    LeetCode:Balanced Binary Tree
    error: openssl/md5.h: No such file or directory
    欢迎来到Swift天地(Welcome to Swift)
    最大子阵列和
    【Cocos2d-x Lua】数据库封装类型的操作
    python于lxml应用
  • 原文地址:https://www.cnblogs.com/miaoying/p/11713648.html
Copyright © 2011-2022 走看看