有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将执行的GROOVY脚本结果返回到RESTAPI响应

我正在SpringBoot中开发一个RESTAPI,它将接受请求体中的任何groovy脚本,并将在服务器上执行它并返回执行结果。我试图找出如何获得脚本的执行结果,即使脚本显式地不返回任何值。它就像一个在线groovy编译器,您可以在其中发布代码并获得结果

import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyShell;
import groovy.lang.Script;

public class GroovyController {
public static void main(String[] args) throws ScriptException {

   System.out.println(runScript());

}


public static String runScript(){
    String script = "class Student {\n" +
            "   private int StudentID;\n" +
            "   private String StudentName;\n" +
            "\t\n" +
            "   void setStudentID(int pID) {\n" +
            "      StudentID = pID;\n" +
            "   }\n" +
            "\t\n" +
            "   void setStudentName(String pName) {\n" +
            "      StudentName = pName;\n" +
            "   }\n" +
            "\t\n" +
            "   int getStudentID() {\n" +
            "      return this.StudentID;\n" +
            "   }\n" +
            "\t\n" +
            "   String getStudentName() {\n" +
            "      return this.StudentName;\n" +
            "   }\n" +
            "\t\n" +
            "   static void main(String[] args) {\n" +
            "      Student st = new Student();\n" +
            "      st.setStudentID(1);\n" +
            "      st.setStudentName(\"Joe\");\n" +
            "\t\t\n" +
            "      println(st.getStudentID());\n" +
            "      println(st.getStudentName());\n" +
            "   } \n" +
            "}";


    GroovyShell shell = new GroovyShell();

    Object result = shell.evaluate(script);
    return result.toString();

}

}


共 (1) 个答案

  1. # 1 楼答案

    我想知道如何在安全的沙箱模型中用java运行groovy脚本。我使用Groovy Shell类的run方法用java运行groovy脚本。如果执行的脚本本身返回任何值,比如^{,Run方法将返回结果。如果脚本没有任何return语句,shell的Run方法将返回null,Run方法将返回结果

    println("Hello world!!")的情况下,它不会返回任何明显的结果,但在API的请求负载中发送此脚本的客户端将期望得到打印文本的响应。为了捕获PrintStream编写的内容,可以使用绑定将定制PrintWriter绑定到GroovyShell中的out对象。我已经编写了一个完整的基于Spring Boot的微服务,它公开了一个REST API来执行Groovy脚本。服务器处于安全的沙箱模型中

    完整的微服务代码可以在这里找到Script Execution Service