給JavaBean賦預設值並且轉Json字串

來源:互聯網
上載者:User


軟體測試技術交流群 : 429183023


今日在工作中整理dubbo介面的時候,有些介面參數類型是JavaBean類型的資料,在整理的時候又想直接將JavaBean參數直接以預設的json格式整理,於是想到如何將javaBean的預設值 直接轉換成為 Json格式的資料,避免自己手動去拼字json字串。(此段代碼還有值得最佳化的地方,暫時只支援Java基礎資料型別 (Elementary Data Type)的轉換,不支援javaBean中包含其他javaBean物件變數的轉換、也不支援List/Map等類型的轉換,後期有空想辦法最佳化,大家如果有最佳化好的代碼也可以拿出來分享)廢話不多說,直接上代碼

package com.up.util.tools;import com.google.gson.Gson;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.Date;import java.util.HashMap;import java.util.Map;/** * Created by *** on 2017-3-29 * TIME 11:07. */public class JavaBeanToJson {    public static String toJson(Class clazz) throws Exception {        Gson gson = new Gson();        String result = "";        if (clazz.equals(Map.class)) {            result = clazz.getName() + "\t" + gson.toJson(new HashMap<>());        } else {            Object object = clazz.newInstance();            object = getBean(object);            result = clazz.getName() + "\t" + gson.toJson(object);        }        return result;    }    private static <T> Object getBean(T object) throws Exception {        Class<?> classType = object.getClass();        //SqlRowSet srs = jdbcTemplate.queryForRowSet(sql);        Field[] fields = classType.getDeclaredFields();//得到對象中的欄位        //每次迴圈時,重新執行個體化一個與傳過來的物件類型一樣的對象        T objectCopy = (T) classType.getConstructor(new Class[]{}).newInstance(new Object[]{});        for (int i = 0; i < fields.length; i++) {            Field field = fields[i];            String fieldName = field.getName();            Object value = null;            //根據欄位類型決定結果集中使用哪種get方法從資料中取到資料            if (field.getType().equals(String.class)) {                value = "";            } else if (field.getType().equals(int.class) || field.getType().equals(Integer.class)) {                value = new Integer(0);            } else if (field.getType().equals(double.class) || field.getType().equals(Double.class)) {                value = new Double(0);            } else if (field.getType().equals(long.class) || field.getType().equals(Long.class)) {                value = new Long(0);            } else if (field.getType().equals(Date.class)) {                value = new Date();            } else if (field.getType().equals(Object.class)) {                value = new Object();            }            // 獲得屬性的首字母並轉換為大寫,與setXXX對應            String firstLetter = fieldName.substring(0, 1).toUpperCase();            String setMethodName = "set" + firstLetter                    + fieldName.substring(1);            if (fieldName.equals("serialVersionUID")) {                continue;            }            Method setMethod = classType.getMethod(setMethodName,                    new Class[]{field.getType()});            setMethod.invoke(objectCopy, new Object[]{value});//調用對象的setXXX方法        }        return objectCopy;    }}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.