java使用javascript中的方法进行参数判断

今天上午同事让我学习一个技术:jsengine。跟我说,要解决一个问题:由于目前这个项目采用的是前后端分离的形式,那么前后端都要对同一个对象或者说属性进行校验,防止出现空值或不符合格式的参数值。

但是jsengine这个没找到什么资料,倒是找到了别的:Java 8 Nashorn 教程(https://wizardforcel.gitbooks.io/modern-java/content/ch3.html,有兴趣的可以看看)

于是我写了个工具类,这样的话项目组的人以后都可以简单,方便的使用。

package com.palmyou.tengyun.common.utils;

import com.palmyou.tengyun.common.exception.BusinessException;
import org.apache.commons.lang3.StringUtils;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.io.FileReader;

public class JavaScriptUtils {

    public static final ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");

    /**
     * @param path js地址
     * @param functionName js中将要执行的方法名字
     * @param object 传入参数对象(如果是简单类型也要换成包装类型,例:int->Integer)
     * @param clazz 传入参数对象的class
     */
    public static String evel(String path,String functionName,Object object,Class clazz) throws Exception{
        if(StringUtils.isEmpty(path)){
            throw new BusinessException("路径不能为空");
        }
        if(StringUtils.isEmpty(functionName)){
            throw new BusinessException("方法名不能为空");
        }
        if(object == null){
            throw new BusinessException("参数对象不能为空");
        }
        if(clazz == null){
            throw new BusinessException("参数对象Class不能为空");
        }
        System.out.println(clazz.getResource(path).getPath());
        engine.eval(new FileReader(clazz.getResource(path).getPath()));
        Invocable invocable = (Invocable) engine;

        Object result = invocable.invokeFunction(functionName, object);
        return String.valueOf(result);
    }

}
由于我们的项目是springboot的,所以common是一个单独的项目,所以我想获取别的项目里的js地址,那么必须得到别的项目里给我传的对象的Class。然后要用js里的方法必须要用new ScriptEngineManager().getEngineByName("nashorn")和Invocable invocable = (Invocable) engine。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值