最近写接口经常用到字符串报文封装,这里汇总一下用到的几种方法:
1、直接将模板定义在常量字符串中
public static final String READ_ECM_Xml="<?xml version='1.0' encoding='UTF-8'?><root><BASE_DATA><USER_CODE>${usercode}</USER_CODE><USER_NAME>${username}</USER_NAME><USER_ORG_CODE>${userorgcode}</USER_ORG_CODE><USER_SUBORG_CODE>${usersuborgcode}</USER_SUBORG_CODE><ORG_CODE>${orgcode}</ORG_CODE><COM_CODE>${comcode}</COM_CODE><ORG_NAME>${orgname}</ORG_NAME><ROLE_CODE>RYX_JYCL</ROLE_CODE><SECURITY_INFO><SYSTEM_ID>27</SYSTEM_ID><STR_TXT>${strtxt}</STR_TXT><STR_MTXT>${strmtxt}</STR_MTXT></SECURITY_INFO></BASE_DATA><META_DATA><BATCH><APP_CODE>CL_RYX</APP_CODE><APP_NAME>人意险理赔</APP_NAME><ORG_CODE>${orgcode2}</ORG_CODE><COM_CODE>${comcode2}</COM_CODE><BUSI_NO>${busino}</BUSI_NO><INS_TYPE></INS_TYPE><SYSTEM_ID>27</SYSTEM_ID></BATCH></META_DATA></root>";
可以通过如下两种方式进行封装:
String context=XMLContext.READ_ECM_Xml;
Map<String,String> map=new HashMap<String,String>();
map.put("usercode","1");
map.put("username","2");
map.put("userorgcode","3");
map.put("usersuborgcode","4");
map.put("orgcode","5");
map.put("comcode","6");
map.put("orgname","7");
map.put("strtxt","8");
map.put("strmtxt","9");
map.put("orgcode2","10");
map.put("comcode2","11");
map.put("busino","12");
/** ------------- 方法一 ----------------*/
try {
VelocityContext velocityContext = new VelocityContext(map);
StringWriter result = new StringWriter();
VelocityEngine engine = new VelocityEngine();
try {
engine.init();
} catch (Exception e) {
e.printStackTrace();
}
engine.evaluate(velocityContext, result,"test", context);
String returnString = result.toString();
logger.info("returnString:"+returnString);
} catch (ParseErrorException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MethodInvocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ResourceNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/** ------------- 方法二 ----------------*/
String patternString = "\\$\\{(" + StringUtils.join(map.keySet(), "|") + ")\\}";
Pattern pat = Pattern.compile(patternString);
Matcher matcher = pat.matcher(context);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(sb, map.get(matcher.group(1)));
}
matcher.appendTail(sb);
sb.toString();
}
2、可以通过将模板定义在文件中的方式,这种方式同样有两种方法
方法一是通过Velocity.mergeTemplate()的方法这里就不写了,网上有很多,我这里大概写一下
Template template = Velocity.getTemplate(fileName);
VelocityContext context = new VelocityContext();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PrintWriter dw = new PrintWriter(outputStream);
Velocity.mergeTemplate(template.getName(), charset, context, dw);
outputStream.close();
dw.close();
return outputStream.toByteArray();
方法二是同过freemarker.template.Template的方法
@Service
public class FreemarkManager {
private static Logger log = LoggerFactory.getLogger(FreemarkManager.class);
@Autowired
private FreeMarkerConfigurer freemarkerConfig;
public String fltTemplateIntoString(String templateFileName, Object model) {
// 保证Configuration能初始化
String templateString = null;
try {
freemarkerConfig.afterPropertiesSet();
Configuration config = freemarkerConfig.getConfiguration();
Template template = config.getTemplate(templateFileName);
templateString = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);
} catch (IOException e) {
log.error("Freemark模板"+templateFileName+"获取IOException异常:" +e.getMessage());
} catch (TemplateException e) {
log.error("Freemark模板"+templateFileName+"TemplateException异常:" +e.getMessage());
}
return templateString;
}
}
service 的调用:
Map<String, Object> model = new HasMap<String, Object>();
model.put("amountChinese", MoneyUtil.toChinese(nvl(p10PrintInfo.getTotalAmount(),"0")));//大写金额
String tableStr=freemarkManager.fltTemplateIntoString("p10_common_accountinfo.ftl", model);
<!-- 配置freeMarker的模板路径 -->
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath">
<value>classpath:tlx/freemarkTemplate</value>
</property>
<property name="freemarkerVariables">
<map>
<entry key="xml_escape" value-ref="fmXmlEscape" />
</map>
</property>
<property name="freemarkerSettings">
<props>
<prop key="default_encoding">UTF-8</prop>
<prop key="classic_compatible">true</prop>
<prop key="number_format">#.##</prop>
</props>
</property>
<!--property name="freemarkerSettings" ref="freemarkerConfiguration"/ -->
</bean>
<bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/>
</beans>
相关推荐
java 通过模板生成 xml,发送报文
上机实践5 字符串、时间与数字 22 实验1 STRING类的常用方法 22 实验2 比较日期的大小 24 实验3 处理大整数 25 上机实践6 图形用户界面设计(1) 27 实验2 信号灯 28 实验3 布局与日历 31 上机实践7 图形用户界面...
< java.lang >StringBuffer字符串缓冲区:★★★☆ 73 < java.lang >StringBuilder字符串缓冲区:★★★☆ 74 基本数据类型对象包装类★★★☆ 75 集合框架:★★★★★,用于存储数据的容器。 76 < java.util > ...
方法public String toString(),把Student类的对象的所有属性信息组合成一个字符串以便输出显示。编写一个Java Application程序,创建Student类的对象,调用上述方法进行验证并实现相应输出。
5.寻找两个字符串的最长前后缀(KMP) 6.hash(进制hash,无错hash,多重hash,双hash) 7.后缀数组 (按字典序排字符串后缀) 8.前缀循环节(KMP的fail函数) 9.AC自动机 (n个kmp) 10.后缀自动机 小技巧: 1.关于int,double强...
设定字符串为“张三,你好,我是李四” 产生张三的密钥对(keyPairZhang) 张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节 通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到...
设定字符串为“张三,你好,我是李四” 产生张三的密钥对(keyPairZhang) 张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节 通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到...
Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...
Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...
Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...
Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...
Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...
Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...
Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...
Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...
Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...
Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...
5.4.3 Java类模板创建125 5.4.4 Java中对象的创建和使用127 5.5 属性130 5.5.1 属性的定义130 5.5.2 变量131 5.6 方法132 5.6.1 方法的定义132 5.6.2 构造方法135 5.6.4 方法重载138 5.6.5 自定义方法138 5.6.6 系统...
只一句代码就可以将一个字符串写入一个文件,如果我们自己写的话,得这样 打开一个文件,判断是否存在,判断编码类型,写入方式是追加还是覆盖,接着创建流,写入流,关闭流等等没有十几,二十行代码根本搞不定,还不一定见...
- 字符串与集合:深入String类和集合框架,如ArrayList、HashMap。 - 异常处理:介绍try-catch和自定义异常。 五、I/O与文件操作 - I/O流:讲解输入输出流的基本概念。 - 文件操作:指导文件的读写和操作。 六、...