最近写接口经常用到字符串报文封装,这里汇总一下用到的几种方法:
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>
相关推荐
3. **转换为字符串**:为了发送或保存,我们需要将`Document`对象转换为字符串,这通常通过`TransformerFactory`和`Transformer`实现。 ```java TransformerFactory transformerFactory = TransformerFactory.new...
Java字符串中${}或者{}等占位符替换工具类 Java字符串中${}或者{}等占位符替换工具类是一个功能强大且实用的工具类,它可以将Java字符串中的占位符依次替换为指定的值。该工具类的主要功能是实现占位符的替换,即将...
在本案例中,我们讨论的是一个专门用于封装动态字符串数组的自定义类,该类可能是用C++或其他支持面向对象编程的语言编写的。 首先,动态字符串数组类通常包含以下核心功能: 1. **初始化**:在创建类的实例时,...
首先,`StringBuffer`或`StringBuilder`在Java中用于构建可变字符串,它们在循环中拼接字符串时比直接使用`+`操作符更有效率。然而,这种字符串拼接方式在处理大量数据或者频繁拼接时,容易导致内存开销过大,因为...
这些占位符通常是一些特殊的字符串,如`${变量名}`。 3. **替换占位符**:遍历找到的占位符,使用`XWPFTextParagraph`的`replaceText()`方法将占位符替换为实际的值。这些值可以来自数据库、配置文件或其他数据源。...
### Java程序设计:封装扑克牌并分配给四个人 #### 程序概述 本Java程序旨在模拟将一副标准的52张扑克牌随机分配给四个人(假设为A、B、C、D)。程序首先定义了一个名为`Poker`的类,其中包含了几个关键的方法:`...
4. **生成 JSON 配置**:调用 `toOption()` 方法将 Java 对象转换为 ECharts 可识别的 JSON 字符串。 5. **传递到前端**:将生成的 JSON 字符串通过 HTTP 响应发送到前端,或者直接嵌入到 HTML 模板中。 6. **前端...
2. **复杂的数据类型操作**:Redis支持字符串、列表、集合、哈希表等多种数据结构,`RedisClientTemplate`可能会提供针对这些数据类型的接口,例如`lPush(key, value)`向列表尾部添加元素,`sAdd(setKey, member)`向...
7. **在线打开**:如果希望用户在线打开Excel,可以将生成的文件转换为Base64编码的字符串,然后通过HTTP响应返回给前端,前端可以解析这个字符串并以数据URL的形式在新窗口中打开。 在实际项目中,我们还需要处理...
"asdf":""}`,这表示如果`key`的值等于1,单元格将显示"asdf",否则显示空字符串。 在Java中实现Excel导出,首先需要创建一个Excel模板,模板中包含固定的格式和动态填充的占位符。然后,你可以使用jXLS库解析模板...
5. **设置数据**:在Cell中填充数据,可以是字符串、数字、日期等。 6. **保存文件**:最后将Workbook对象写入到文件中,使用FileOutputStream完成。 二次封装的目的是为了让这些步骤更加简洁。例如,可能会提供一...
接下来,我们可以创建一个`renderChart()`方法,用于根据设置的属性生成FusionCharts的JavaScript代码,这可以通过拼接字符串或者使用模板引擎实现。这个方法会包含必要的FusionCharts初始化代码,比如: ```java ...
在Java中,你可以创建一个类来表示这个配置,并将其转换为JSON字符串。 例如,创建一个简单的柱状图配置: ```java import com.google.gson.Gson; public class HighchartsConfig { private String chartType = ...
本文档提供了 JAVA 知识点复习模板,涵盖了 JAVA 的基础知识点,包括数据类型、字符串操作、异常处理、 Servlet 生命周期、集合框架、逻辑运算符、Map 接口实现等。 一、数据类型 JAVA 提供两种不同的类型:引用...
这样,用户可以通过字符串形式输入公式,例如`"2 * x + 3"`,然后通过`public double evaluateExpression(String expression, Map, Double> variables)`来计算。 5. **线程安全与性能优化**: 在多线程环境中,...
- 使用`equals()`方法比较两个字符串的内容是否相等。 **字符串操作方法:** - `length()`: 返回字符串长度。 - `charAt(int index)`: 返回指定索引处的字符。 - `substring(int beginIndex, int endIndex)`: 返回...
Java模板语言Beetl是一个强大的、高效的、易用的模板引擎,主要应用于Web开发中,用于将业务逻辑和视图层进行分离。它的设计目标是提供一个简洁、灵活且功能丰富的模板语法,使得开发者可以更加专注于页面的布局和...
Velocity是Apache软件基金会的一个开源项目,它是一款Java模板引擎,主要用在Web开发中,用于生成动态网页内容。Velocity通过将HTML或者XML模板与Java代码分离,使得开发者可以专注于业务逻辑,而设计师则能专注于...
- 实验2:回文数,通过编写程序检查一个数字是否为回文,练习条件判断和字符串操作。 - 实验3:猜数字游戏,实现一个简单的用户交互程序,锻炼逻辑思维和控制流程。 3. **类与对象** - 实验1:类封装,通过设计...
10. **字符串处理**:String类在Java中广泛使用,实验可能包含字符串的操作,如拼接、查找、替换、分割等。 每个实验题目都是一个精心设计的挑战,旨在推动学生独立思考和解决问题。完成实验的过程中,学生不仅会...