`
huttoncs
  • 浏览: 200883 次
  • 性别: 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,发送报文

    3. **转换为字符串**:为了发送或保存,我们需要将`Document`对象转换为字符串,这通常通过`TransformerFactory`和`Transformer`实现。 ```java TransformerFactory transformerFactory = TransformerFactory.new...

    java字符串中${}或者{}等的占位符替换工具类

    Java字符串中${}或者{}等占位符替换工具类 Java字符串中${}或者{}等占位符替换工具类是一个功能强大且实用的工具类,它可以将Java字符串中的占位符依次替换为指定的值。该工具类的主要功能是实现占位符的替换,即将...

    动态字符串数组封装的类

    在本案例中,我们讨论的是一个专门用于封装动态字符串数组的自定义类,该类可能是用C++或其他支持面向对象编程的语言编写的。 首先,动态字符串数组类通常包含以下核心功能: 1. **初始化**:在创建类的实例时,...

    sql的封装,不需要使用StringBuffer进行字符串拼接

    首先,`StringBuffer`或`StringBuilder`在Java中用于构建可变字符串,它们在循环中拼接字符串时比直接使用`+`操作符更有效率。然而,这种字符串拼接方式在处理大量数据或者频繁拼接时,容易导致内存开销过大,因为...

    java代码实现填充word模板生成word合同的实例

    这些占位符通常是一些特殊的字符串,如`${变量名}`。 3. **替换占位符**:遍历找到的占位符,使用`XWPFTextParagraph`的`replaceText()`方法将占位符替换为实际的值。这些值可以来自数据库、配置文件或其他数据源。...

    用Java封装扑克牌

    ### Java程序设计:封装扑克牌并分配给四个人 #### 程序概述 本Java程序旨在模拟将一副标准的52张扑克牌随机分配给四个人(假设为A、B、C、D)。程序首先定义了一个名为`Poker`的类,其中包含了几个关键的方法:`...

    java封装echarts

    4. **生成 JSON 配置**:调用 `toOption()` 方法将 Java 对象转换为 ECharts 可识别的 JSON 字符串。 5. **传递到前端**:将生成的 JSON 字符串通过 HTTP 响应发送到前端,或者直接嵌入到 HTML 模板中。 6. **前端...

    Redis客户端Java服务接口封装

    2. **复杂的数据类型操作**:Redis支持字符串、列表、集合、哈希表等多种数据结构,`RedisClientTemplate`可能会提供针对这些数据类型的接口,例如`lPush(key, value)`向列表尾部添加元素,`sAdd(setKey, member)`向...

    java实现自定义excel模板导出excel并可保存客户端和在线打开

    7. **在线打开**:如果希望用户在线打开Excel,可以将生成的文件转换为Base64编码的字符串,然后通过HTTP响应返回给前端,前端可以解析这个字符串并以数据URL的形式在新窗口中打开。 在实际项目中,我们还需要处理...

    java excle导出封装 poi jxls exlce导出源码

    "asdf":""}`,这表示如果`key`的值等于1,单元格将显示"asdf",否则显示空字符串。 在Java中实现Excel导出,首先需要创建一个Excel模板,模板中包含固定的格式和动态填充的占位符。然后,你可以使用jXLS库解析模板...

    java中excel导出工具poi接口封装

    5. **设置数据**:在Cell中填充数据,可以是字符串、数字、日期等。 6. **保存文件**:最后将Workbook对象写入到文件中,使用FileOutputStream完成。 二次封装的目的是为了让这些步骤更加简洁。例如,可能会提供一...

    java fusionChart属性封装

    接下来,我们可以创建一个`renderChart()`方法,用于根据设置的属性生成FusionCharts的JavaScript代码,这可以通过拼接字符串或者使用模板引擎实现。这个方法会包含必要的FusionCharts初始化代码,比如: ```java ...

    highcharts的java写法(一个封装方法调用即可)

    在Java中,你可以创建一个类来表示这个配置,并将其转换为JSON字符串。 例如,创建一个简单的柱状图配置: ```java import com.google.gson.Gson; public class HighchartsConfig { private String chartType = ...

    JAVA知识点复习模板.doc

    本文档提供了 JAVA 知识点复习模板,涵盖了 JAVA 的基础知识点,包括数据类型、字符串操作、异常处理、 Servlet 生命周期、集合框架、逻辑运算符、Map 接口实现等。 一、数据类型 JAVA 提供两种不同的类型:引用...

    java 公式计算汇总,直接调用其方法即可进行运算

    这样,用户可以通过字符串形式输入公式,例如`"2 * x + 3"`,然后通过`public double evaluateExpression(String expression, Map, Double&gt; variables)`来计算。 5. **线程安全与性能优化**: 在多线程环境中,...

    李兴华java笔记

    - 使用`equals()`方法比较两个字符串的内容是否相等。 **字符串操作方法:** - `length()`: 返回字符串长度。 - `charAt(int index)`: 返回指定索引处的字符。 - `substring(int beginIndex, int endIndex)`: 返回...

    基于java的模板语言 Beetl.zip

    Java模板语言Beetl是一个强大的、高效的、易用的模板引擎,主要应用于Web开发中,用于将业务逻辑和视图层进行分离。它的设计目标是提供一个简洁、灵活且功能丰富的模板语法,使得开发者可以更加专注于页面的布局和...

    Velocity java 模板

    Velocity是Apache软件基金会的一个开源项目,它是一款Java模板引擎,主要用在Web开发中,用于生成动态网页内容。Velocity通过将HTML或者XML模板与Java代码分离,使得开发者可以专注于业务逻辑,而设计师则能专注于...

    java2实验实用模板代码

    - 实验2:回文数,通过编写程序检查一个数字是否为回文,练习条件判断和字符串操作。 - 实验3:猜数字游戏,实现一个简单的用户交互程序,锻炼逻辑思维和控制流程。 3. **类与对象** - 实验1:类封装,通过设计...

    兰州大学java实验10

    10. **字符串处理**:String类在Java中广泛使用,实验可能包含字符串的操作,如拼接、查找、替换、分割等。 每个实验题目都是一个精心设计的挑战,旨在推动学生独立思考和解决问题。完成实验的过程中,学生不仅会...

Global site tag (gtag.js) - Google Analytics