最近在负责邮件服务,里面会涉及到很多Email模板,这里我使用到了java的模板引擎:jetbrick-template,需要使用Map集合一个个往里面设置值,然后调用模板方法,进行替换。实体类一个个往Map中设置值,感觉非常麻烦,工作效率极低,此时想到了使用Java中的反射获得实体类中的值,工具类如下

  java 模板引擎点我直达

工具类

package com.ybchen.springbootohmyemail.convert;

import com.sun.tools.javac.code.Attribute;
import com.ybchen.springbootohmyemail.entity.EmailData; import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map; /**
* @ClassName:ReplaceEmailTemplate
* @Description:邮件模板转换工具
* @Author:chenyb
* @Date:2020/11/30 6:52 下午
* @Versiion:1.0
*/
public class ReplaceEmailTemplate {
/**
* 实体类转Map
* @param clazz 类
* @param obj 实体类
* @param <T> 实体类
* @return
*/
public static<T> Map<String,Object> replaceContext(Class<?> clazz,T obj) {
Map<String,Object> map=new HashMap<String,Object>();
Field[] declaredFields = clazz.getDeclaredFields();
for(Field f:declaredFields){
try {
//打开可见性,要不然获取不到值
f.setAccessible(true);
map.put(f.getName(),f.get(obj));
} catch (IllegalAccessException e) {
e.printStackTrace();
}finally {
//关闭可见性
f.setAccessible(false);
}
}
return map;
}
}

调用

EmailData emailData = new EmailData("ybchen", "199999999", "www.baidu.com");
Map<String, Object> map = ReplaceEmailTemplate.replaceContext(EmailData.class,emailData);
package com.ybchen.springbootohmyemail.entity;

import java.io.Serializable;

/**
* @ClassName:EmailData
* @Description:TODO
* @Author:chenyb
* @Date:2020/11/30 6:56 下午
* @Versiion:1.0
*/
public class EmailData implements Serializable {
private String username;
private String email;
private String url; public EmailData() {
} public EmailData(String username, String email, String url) {
this.username = username;
this.email = email;
this.url = url;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public String getUrl() {
return url;
} public void setUrl(String url) {
this.url = url;
} @Override
public String toString() {
return "EmailData{" +
"username='" + username + '\'' +
", email='" + email + '\'' +
", url='" + url + '\'' +
'}';
}
}

Java 反射获取对象里的值的更多相关文章

  1. Java反射获取对象成员属性,getFields()与getDeclaredFields()方法的区别

    Java反射获取对象成员属性,getFields()与getDeclaredFields()方法的区别 ​ 在工作中遇到一个问题,就是你需要去判断某个字符串是不是对象的某个成员属性名,然后根据判断结果 ...

  2. Java反射获取对象VO的属性值(通过Getter方法)

    有时候,需要动态获取对象的属性值. 比如,给你一个List,要你遍历这个List的对象的属性,而这个List里的对象并不固定.比如,这次User,下次可能是Company. e.g. 这次我需要做一个 ...

  3. 【java】java反射获取属性和属性值,java反射设置属性和属性值

    今日份代码如下: /** * * @Author: SXD * @Description: * @Date: create in 2019/9/20 15:39 */ public class Pro ...

  4. java反射获取字段的属性值,以及为字段赋值等方法

    1.获取某个类的属性值 /*利用getter方法获取值(首字母大写) CjJssetDTO obj: */ String filedName = "Cj"+(i+1); Class ...

  5. java 反射 - 获取成员变量的值.

    通过反射,可以获取所有声明的成员变量(包括所有的),代码如下: package spt.test.src; public class Person { private String name = &q ...

  6. 第五课 JAVA反射获取对象属性和方法(通过配置文件)

    Service1.java package reflection; public class Service1 { public void doService1(){ System.out.print ...

  7. 第五课 JAVA反射获取对象属性和方法

    package com.hero; import java.lang.reflect.Field; public class TestReflction5 { public static void m ...

  8. 利用反射获取对象中的值等于x的字段

    Field[] field = behavior.getClass().getDeclaredFields(); for (int i = 0; i < field.length; i++) { ...

  9. Java反射获取class对象的三种方式,反射创建对象的两种方式

    Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName ...

  10. jquery attr()方法 添加,修改,获取对象的属性值。

    jquery attr()方法 添加,修改,获取对象的属性值. jquery中用attr()方法来获取和设置元素属性,attr是attribute(属性)的缩写,在jQuery DOM操作中会经常用到 ...

随机推荐

  1. FE知识点(硕哥)

    目录 前传: 1.typeof和类型转换 正文: 1.作用域.作用域链([[scope]]) 2.立即执行函数 3.闭包 4.对象.包装类 5.原型原型链 6.call.apply 7.继承模式.命名 ...

  2. JDK源码阅读-------自学笔记(十二)(java.lang.StringBuffer和StringBuilder比较)

    StringBuilder结构

  3. 内网渗透 Metasploit(MSF)基础使用

    免责申明 以下内容仅供学习使用,非法使用造成的问题由使用人承担 攻击思路 漏洞探测(信息收集) <- fsacn,namp | 漏洞利用 <- 工具(msf等) | 获取服务器权限 MSF ...

  4. vulnhub --> Web Machine: (N7)

    靶场下载地址 Web Machine: (N7) << 点我 开始打靶 ip发现: nmap扫描网段发现靶机ip:192.168.56.101 端口发现: 对靶机进行常规端口扫描 访问网站 ...

  5. Unicode 15.0 标准已发布,新增鹅、豌豆等 20个emoji

    原文地址:The Unicode Blog: Announcing The Unicode Standard, Version 15.0 Unicode 标准版本 15.0 现已推出,包括核心规范.附 ...

  6. 【源码阅读】消息队列之DoNetMQ的初步了解

    这个组件,是一个分布式的组件,好处就是,不怕消息太多了,都挤在一个服务器上,出现服务器内存不够的情况.服务器内存不够用的问题解决了,但是如果消费队列要进行数据库的操作,那么性能瓶颈将出现在数据库上,如 ...

  7. Android 13 - Media框架(1)- 总览

    关注公众号免费阅读全文,进入音视频开发技术分享群! 为了加深对Android Media框架的理解,决定在这里记录下学习过程中碰到的问题以及一些个人思考.由于本人水平有限,笔记的内容可能会有一些错误, ...

  8. UIView AutoLayout WrapContent,UIview 实现自动包裹

    一.需求 实现一个UI组件,要求组件内部的内容变化的时候,内容需要同时产生变化 二.实现 效果: 一个三个元素的组件,两边固定大小,中间的Label内容会变化 实现的约束: 首先保证三个元素同时居中, ...

  9. pandas基础--数据结构:索引对象

    pandas含有是数据分析工作变得更快更简单的高级数据结构和操作工具,是基于numpy构建的. 本章节的代码引入pandas约定为:import pandas as pd,另外import numpy ...

  10. kettle从入门到精通 第四十二课 kettle 1对多表拆分同步

    1.在有的业务场景中,会涉及一对多表拆分同步的业务场景,也就是说原表是一张表,将原表字段进行拆分放入目标库中的多张表,如下面的示例将表student_third中的数据 同步到student.teac ...