`
huttoncs
  • 浏览: 198908 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java 通过模板封装字符串的方法

    博客分类:
  • java
阅读更多

最近写接口经常用到字符串报文封装,这里汇总一下用到的几种方法:

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,发送报文

    java 通过模板生成 xml,发送报文

    java2实验实用模板代码

    上机实践5 字符串、时间与数字 22 实验1 STRING类的常用方法 22 实验2 比较日期的大小 24 实验3 处理大整数 25 上机实践6 图形用户界面设计(1) 27 实验2 信号灯 28 实验3 布局与日历 31 上机实践7 图形用户界面...

    Java基础知识点总结.docx

    &lt; java.lang &gt;StringBuffer字符串缓冲区:★★★☆ 73 &lt; java.lang &gt;StringBuilder字符串缓冲区:★★★☆ 74 基本数据类型对象包装类★★★☆ 75 集合框架:★★★★★,用于存储数据的容器。 76 &lt; java.util &gt; ...

    编写一个JAVA程序,定义一个Student类

    方法public String toString(),把Student类的对象的所有属性信息组合成一个字符串以便输出显示。编写一个Java Application程序,创建Student类的对象,调用上述方法进行验证并实现相应输出。

    ACM巨全模板 .pdf

    5.寻找两个字符串的最长前后缀(KMP) 6.hash(进制hash,无错hash,多重hash,双hash) 7.后缀数组 (按字典序排字符串后缀) 8.前缀循环节(KMP的fail函数) 9.AC自动机 (n个kmp) 10.后缀自动机 小技巧: 1.关于int,double强...

    JAVA上百实例源码以及开源项目

     设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节  通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到...

    JAVA上百实例源码以及开源项目源代码

     设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节  通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到...

    java开源包4

    Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...

    java开源包11

    Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...

    java开源包101

    Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...

    java开源包6

    Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...

    java开源包9

    Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...

    java开源包5

    Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...

    java开源包8

    Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...

    java开源包10

    Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...

    java开源包1

    Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...

    java开源包3

    Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom ...

    java基础案例与开发详解案例源码全

    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 系统...

    玩转模板--自动代码生成工程

    只一句代码就可以将一个字符串写入一个文件,如果我们自己写的话,得这样 打开一个文件,判断是否存在,判断编码类型,写入方式是追加还是覆盖,接着创建流,写入流,关闭流等等没有十几,二十行代码根本搞不定,还不一定见...

    编程课件+Java系列课程+PPT课件+Java教学

    - 字符串与集合:深入String类和集合框架,如ArrayList、HashMap。 - 异常处理:介绍try-catch和自定义异常。 五、I/O与文件操作 - I/O流:讲解输入输出流的基本概念。 - 文件操作:指导文件的读写和操作。 六、...

Global site tag (gtag.js) - Google Analytics