1. 程式人生 > >根據jsonobject中的部分資料更新javabean中對應的屬性[PATCH]

根據jsonobject中的部分資料更新javabean中對應的屬性[PATCH]

springmvc restful api中的patch方法中使用到的一個類分享給筒子們:

歡迎批評指正

import java.lang.reflect.Field;
import java.util.Iterator;

import net.sf.json.JSONObject;

public class JavaBeanUtils {
	/**
	 * 根據json中的部分資料更新bean中對應的屬性
	 * @param bean
	 * @param json
	 * @return
	 * @throws Exception
	 */
	public static <T> void patch(T bean,JSONObject json) throws Exception{
		Field[] fields=bean.getClass().getDeclaredFields();
		for(Field field:fields){
//			System.out.println(field.getName());
			Iterator iterator = json.keys();
			while(iterator.hasNext()){
				String key = (String) iterator.next();
				if(field.getName().equals(key)){
					String value = json.getString(key);
					String type = field.getType().toString();//得到此屬性的型別  
					field.setAccessible(true);//設定些屬性是可以訪問的  
					// 賦值(目前只判斷了以下幾種,如有其他的請自行擴充套件)
					if (type.endsWith("String")) {  
						field.set(bean, value);
					}else if(type.endsWith("float")){
						field.set(bean, Float.valueOf(value));
					}else if(type.endsWith("int")){
						field.set(bean, Integer.parseInt(value));
					}
				}
			}
		}
	}
}

獲取屬性的相關說明:http://blog.csdn.net/sxbjffsg163/article/details/9955701

getFields()獲得某個類的所有的公共(public)的欄位,包括父類。
getDeclaredFields()獲得某個類的所有申明的欄位,即包括public、private和proteced,但是不包括父類的申明欄位。
同樣類似的還有getConstructors()和getDeclaredConstructors(),getMethods()和getDeclaredMethods()。

其他實現:

xxxx source = new xxxx();
Method[] sourceMethods = source.getClass().getMethods();
for(int i=0;i<sourceMethods.length;i++){
  if(sourceMethods[i].getName().startsWith("get")){
     lsName = sourceMethods[i].getName().substring(3);   // 屬性
     Object loValue = sourceMethods[i].invoke(source, null);  // 值
     String lsSourceType = sourceMethods[i].getReturnType().getName(); //型別
  }
} 

相關推薦

根據jsonobject部分資料更新javabean對應屬性[PATCH]

springmvc restful api中的patch方法中使用到的一個類分享給筒子們: 歡迎批評指正 import java.lang.reflect.Field; import java.ut

Mysql兩種情況下更新欄位部分資料的方法

https://www.jb51.net/article/36878.htm Mysql更新欄位中部分資料第一種情況:  程式碼如下: update tab set A = concat(substring(A,1,3),'bbb'); 從A的1個字元開始取3個字元,加上'bbb'

大表大量資料更新問題

最近遇到個大批量資料更新表字段問題,需要將A表中m欄位儲存的字串進行某種統一格式的替換,where條件類似m like ‘aaa%’。源資料有1700萬條,需要更新的資料有200多萬條。因為所更新的欄位沒有索引,如果用 update set from where m like 'aaa%' 更新

mysql 將A表資料更新到B表

UPDATE table_a t1 INNER JOIN (     SELECT         *     FROM         table_b tt     WHERE         tt.order_info_id IN (             SELECT

把dataset資料更新回 資料庫

,C#使用TheSQL Server .NET Data Provider中的SqlDataAdapter填充DataSet的具體實現方法:   程式碼清單01: SqlConnection sqlConnection1 = new SqlConnection ( "D

SQL不同伺服器資料庫之間資料操作(當在一個伺服器的某張表資料更新時,將更新值通過觸發器插入到另一個伺服器的指定表

第一步:在建立觸發器的伺服器上建立連結伺服器 建立連結伺服器有兩種方法:1.通過SQL語言建立,2.通過資料庫管理工具建立,下面分別進行詳細介紹: 1.通過SQL語言建立 通過SQL語言建立連結伺服器方法 2.通過資料庫管理工具建立(這裡以SQL SER

List集合實現分組,獲取list部分資料

list為原先的總集合,newlist為獲取特定區域後集合,pageindex表示選擇的特定頁碼資料,每頁十條 if(pageIndex*10>list.size()){ newlist=list.subList((pageIndex-1)*10, list.size

mysql匯入資料load data infile用法(將txt檔案資料匯入表)

我們常常匯入資料!mysql有一個高效匯入方法,那就是load data infile 下面來看案例說明   基本語法: load data  [low_priority] [local] infile 'file_name txt' [replace | ignor

python資料存入csv

import csv # 如果不新增newline=""的話,就會每條資料中間都會有空格行 with open("test.csv","w", newline="") as csvfile: # 初始化寫入物件 writer = csv.writer(csvfile) #先

在hibernate查詢資料的 sessionget 和load的區別:

* 第一點.傳送SQL的時機: * load這個方法採用了一個技術.lazy延遲載入(懶載入).真正使用這個物件的資料的時候.(物件的資料不包括主鍵). * get這個方法是立即檢索.當執行session.get()方法的時候,馬上傳送SQL語句查詢.   * 第二點.返回的物件:

flume將kafkatopic資料匯入hive

一、首先更加資料的表結構在hive中進行表的建立。          create table AREA1(unid string,area_punid string,area_no string,area_name s

BeanUtils使用:從一個map集合,拷貝到javaBean(四)

package beanutil; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; impo

MySQL資料庫(表)的匯入匯出(備份和還原) mysql 根據一張表資料更新另一張表

(select * from crawlDocs order by DocCrawlTime desc limit 2000 into outfile '/tmp/weixinData' FIELDS TERMINATED BY ',';) 一般最好是匯出到/tmp目錄下,因為這樣mysql使用者也可以寫入。

如何從輸入流讀取資料到字串

一、讀取思路 1.使用InputStream物件構造InputStreamReader 2.使用InputStreamReader物件構造BufferedReader物件 3.構造一個StringBuilder物件,用來接收BufferedReader中的資料 二、原始碼

詳解C++/C資料在記憶體的存取

本文介紹了指標的一個使用技巧,可以通過此方法將微控制器中的變數按位元組儲存到EEPROM中,也可以從EEPROM中還原一個多位元組的整型數或者浮點數。 在記憶體中變數對整數型別,包括 char, unsigned char, int, unsigned int, lon

webservice(第三天)(包含一個真實專案,讀取EXCEL表格資料到資料庫,其中涉及真實的隱私資料不能公開資料集)

主要內容: CXF的介紹、安裝和配置 CXF釋出SOAP協議的服務 CXF+Spring整合釋出SOAP的服務 CXF釋出REST服務 什麼是REST CXF+Spring整合釋出REST服務 綜合案例 CXF介紹: cxf是一個開源的webservice框架,提供很多完善

如何讀並提取TXT檔案資料到陣列

第一次寫文章,並且內容比較簡單。主要背景是目前的CDIO需要提取出來自txt檔案中的座標,並且放入陣列中進行自動建模。後者仍在進行,前者基本完成,雖然十分簡單。主要思路是使用了fstream,並採用了stringstream進行字元轉換。#include<iostrea

從文字檔案讀取資料到集合,並遍歷集合

import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; /*  * 需求:從文字檔案中讀取資料(每一行

C語言資料型別和他們對應的最大值和最小值的常量

C中各種型別的最大值最小值常量定義在”limits.h”和”float.h”中。 CHAR_MIN和CHAR_MAX分別表示有符號小整型的最小值和最大值,UCHAR_MAX表示無符號小整型的最大值; SHRT_MIN和SHRT_MAX分別表示有符號短整型的最

聊一聊 MySQL 資料編輯過程涉及的兩階段提交

MySQL 資料庫中的兩階段提交,不知道您知道不?這篇文章就簡單的聊一聊 MySQL 資料庫中的兩階段提交,兩階段提交發生在資料變更期間(更新、刪除、新增等),兩階段提交過程中涉及到了 MySQL 資料庫中的兩個日誌系統:redo 日誌和 binlog 檔案。 redo 日誌前面已經介紹過了,就不再介紹了,簡