Diseño de plantilla de mensaje corto dinámico SpringBoot (java)

 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

Supongo que te gusta

Origin blog.csdn.net/qq_38428623/article/details/114690906
Recomendado
Clasificación