今天分享一个通过Java调用Js方法的工具类。

工具类:

import jdk.nashorn.api.scripting.NashornScriptEngine;
import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;


/**
 * @ClassName: JsUtil
 * @Description: JS操作工具类
 * @author: xiaofei
 * @create: 2021年12月10日
 */
public class JsUtil {

    /**
     * logger
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(JsUtil.class);

    /**
     * 调用js方法
     *
     *
     * @param functionName js函数名
     * @param params       参数
     * @param jsPath       js真实路径
     * @return 数据
     */
    public static String callJsFunction(String functionName, Object[] params, String jsPath) {
        Object res = null;
        try {
            File file = new File(jsPath);
            String jsStr = readFile(file);
            String[] options = new String[]{"--language=es6"};
            NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
            NashornScriptEngine engine = (NashornScriptEngine) factory.getScriptEngine(options);
            // 加载js
            engine.eval(jsStr);
            // 调用
            res = engine.invokeFunction(functionName, params);
        } catch (Exception e) {
            LOGGER.error("java调用js代码出错:", e);
        }
        if (StringUtils.isNull(res)) {
            return "";
        }
        return res.toString();
    }

    /**
     * 读取文件、读取文本
     *
     * @param file 文件位置
     * @return 数据
     */
    public static String readFile(File file) {
        StringBuilder result = new StringBuilder();
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String s = null;
            while ((s = br.readLine()) != null) {
                result.append(System.lineSeparator() + s);
            }
            br.close();
        } catch (Exception e) {
            LOGGER.error("读取文件失败:", e);
        }
        return result.toString();
    }
}

JS代码:

function add(var1,var2){
    return var1 + var2;
}

测试代码:

public static void main(String[] args) throws Exception {
        String add = JsUtil.callJsFunction("add", new Object[]{1, 1}, "D:\\test.js");
        System.out.println(add);
    }