1. Ideas de diseño
A través de un formato determinado (como:% s #% s), al encontrar el atributo correspondiente, reemplácelo con el valor correspondiente. La plantilla de SMS puede leer dinámicamente clases y atributos relacionados para configurar en la página de inicio,
2. Ejemplos de clases estáticas
Puede usar estático o el valor del objeto de entidad devuelto por la consulta de datos
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import lombok.Data;
@Data
public class SmsTagTemplate {
/**
* 当前时间
*/
private LocalDateTime localDateTime = LocalDateTime.now();
/**
* 当前日期时间 yyyy-MM-dd HH:mm:ss
*/
private String currentDateTime = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
/**
* 当前日期 yyyy-MM-dd
*/
private String currentDate = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
/**
* 当前时间 HH:mm:ss
*/
private String currentTime = localDateTime.format(DateTimeFormatter.ofPattern("HH:mm:ss"));
}
3. Ejemplo de plantilla de SMS
Nombre de clase SmsTagTemplate, para evitar el mismo nombre de clase, puede usar el nombre del paquete + el nombre de la clase, el ejemplo solo usa el nombre de la clase más el nombre del atributo
Estimado cliente, enhorabuena por su registro exitoso y conviértase en un usuario VIP del sistema XX. SmsTagTemplate # currentDateTime
4. Código básico
private static final String TEMP_FORMAT = "%s#%s";
/**
* 获取短信模板
*
* @param objects 值替换的对象
* @param smsTemplate 短信模板
* @return 返回 转换之后的短信内容
*/
public static String matchSmsTemplate(List<Object> objects, String smsTemplate) {
if (CollectionUtils.isEmpty(objects)) {
return smsTemplate;
}
for (Object specialTemplate : objects) {
smsTemplate = matchSmsTemplate(specialTemplate, smsTemplate);
}
return smsTemplate;
}
/**
* 获取短信模板
*
* @param object 值替换的对象
* @param smsTemplate 短信模板
* @return 返回 转换之后的短信内容
*/
private static String matchSmsTemplate(Object object, String smsTemplate) {
Field[] fields = object.getClass().getDeclaredFields();
if (fields == null) {
return smsTemplate;
}
for (Field field : fields) {
String fieldName = String.format(TEMP_FORMAT, object.getClass().getSimpleName(), field.getName());
boolean matches = Pattern.compile(fieldName).matcher(smsTemplate).find();
if (!matches) {
continue;
}
String value;
Object val;
field.setAccessible(true);
try {
val = field.get(object);
} catch (IllegalAccessException e) {
continue;
}
value = val == null ? "" : String.valueOf(val);
smsTemplate = smsTemplate.replaceAll(fieldName, value);
}
return smsTemplate;
}
5. Devolver resultados
Estimado cliente, enhorabuena por su registro exitoso y conviértase en un usuario VIP del sistema XX. 12/03/2021 10:00:00