Java 反射獲取對象里的值


  最近在負責郵件服務,里面會涉及到很多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 + '\'' +
                '}';
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM