Java写一个模版参数替换 基于el表达式的 工具类
时间: 2024-02-09 15:09:25 浏览: 55
EL表达式的理解与使用
5星 · 资源好评率100%
好的,我可以为您提供一个基于EL表达式的模板参数替换的Java工具类。代码如下:
```java
import javax.el.ELContext;
import javax.el.ExpressionFactory;
import javax.el.ValueExpression;
public class TemplateUtils {
/**
* 根据模版和参数替换模版中的参数
* @param template 模版
* @param params 参数
* @return 替换后的字符串
*/
public static String replace(String template, ParamMap params) {
ExpressionFactory factory = ExpressionFactory.newInstance();
ELContext context = new SimpleContext(params);
ValueExpression expr = factory.createValueExpression(context, template, String.class);
return (String) expr.getValue(context);
}
/**
* 简单的EL上下文,用于将参数映射到EL表达式中
*/
private static class SimpleContext extends ELContext {
private ParamMap params;
public SimpleContext(ParamMap params) {
this.params = params;
}
@Override
public ELResolver getELResolver() {
return null;
}
@Override
public FunctionMapper getFunctionMapper() {
return null;
}
@Override
public VariableMapper getVariableMapper() {
return new SimpleVariableMapper(params);
}
}
/**
* 简单的变量映射器,用于将参数映射到EL表达式中的变量
*/
private static class SimpleVariableMapper extends VariableMapper {
private ParamMap params;
public SimpleVariableMapper(ParamMap params) {
this.params = params;
}
@Override
public ValueExpression resolveVariable(String variable) {
return params.containsKey(variable) ? createValueExpression(params.get(variable)) : null;
}
@Override
public ValueExpression setVariable(String variable, ValueExpression expression) {
return null;
}
}
/**
* 参数映射
*/
public static class ParamMap extends HashMap<String, Object> {
private static final long serialVersionUID = 1L;
public ParamMap() {
super();
}
public ParamMap(Map<String, Object> map) {
super(map);
}
}
}
```
使用方法:
```java
String template = "hello ${name}, your age is ${age}";
TemplateUtils.ParamMap params = new TemplateUtils.ParamMap();
params.put("name", "John");
params.put("age", 30);
String result = TemplateUtils.replace(template, params);
System.out.println(result);
```
输出结果:
```
hello John, your age is 30
```
以上代码通过EL表达式来实现模板参数的替换,同时使用了一个简单的EL上下文和变量映射器来将参数映射到EL表达式中。希望能够满足您的需求。
阅读全文