javabean与map互转

package com.common.util;

import java.sql.Timestamp;
import java.util.Date;

import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
/**
 * 自定义JsonValueProcessor
 * 比如我们要控制JSON序列化过程中的Date对象的格式化,以及数值的格式化,JsonValueProcessor是最好的选择。
 * @author bitaotao
 *
 */
public class JsonDateValueProcessor implements JsonValueProcessor {
	public Object processArrayValue(Object value, JsonConfig config) {
		return process(value);
	}
	public Object processObjectValue(String key, Object value, JsonConfig config) {
		return process(value);
	}
	private Object process(Object value){
		if(value instanceof Date){
			return DateUtil.sdfyyyy_MM_dd_HH_mm_ss.format(value);
		}else if(value instanceof Timestamp){
			return DateUtil.sdfyyyy_MM_dd_HH_mm_ss.format(value);
		}
		return value == null ? "" : value.toString();
	}
}

package com.common.util;

import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.Locale;

import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
/**
 * 只对Float生效,对float不生效
 * @author ctl
 *
 */
public class JsonFloatValueProcessor implements JsonValueProcessor {

	
	/** 
     * 处理数组类型 
     */  
    public Object processArrayValue(Object value, JsonConfig jsonConfig) {  
          
        if (value instanceof float[]) {  
              
            String[] obj = {};  
              
            float[] nums = (float[]) value;  
              
            for (int i = 0; i < nums.length; i++) {  
                obj[i] = roundHalfUp(nums[i], 3);  
            }  
              
            return obj;  
        }  
          
        return value;  
    }  
  
    /** 
     * 处理单个对象 
     */  
    public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {  
          
        if (value instanceof Float) {  
            return roundHalfUp((Float)value, 3);  
        }  
          
        return value;  
    }  
      
    /** 
     * 四舍五入。 
     *  
     * @param number 数值 
     * @return 舍入后的数值 
     * @see java.text.RoundingMode.HALF_UP 
     */  
    public String roundHalfUp(double number, int frac) {  
        NumberFormat fmt = NumberFormat.getInstance(Locale.CHINA);  
          
        fmt.setMaximumFractionDigits(frac);  
        fmt.setRoundingMode(RoundingMode.HALF_UP);  
          
        return fmt.format(number);  
    }  

}

package com.common.util;

import java.util.Date;

public class Person{
	int id;
	Integer max;
	Float price;
	float priceMax;
	Double jine;
	double jineMax;
	boolean success;
	Boolean result;
	String name;
	Date savetime;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public Integer getMax() {
		return max;
	}
	public void setMax(Integer max) {
		this.max = max;
	}
	public Float getPrice() {
		return price;
	}
	public void setPrice(Float price) {
		this.price = price;
	}
	public float getPriceMax() {
		return priceMax;
	}
	public void setPriceMax(float priceMax) {
		this.priceMax = priceMax;
	}
	public Double getJine() {
		return jine;
	}
	public void setJine(Double jine) {
		this.jine = jine;
	}
	public double getJineMax() {
		return jineMax;
	}
	public void setJineMax(double jineMax) {
		this.jineMax = jineMax;
	}
	public boolean isSuccess() {
		return success;
	}
	public void setSuccess(boolean success) {
		this.success = success;
	}
	public Boolean getResult() {
		return result;
	}
	public void setResult(Boolean result) {
		this.result = result;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Date getSavetime() {
		return savetime;
	}
	public void setSavetime(Date savetime) {
		this.savetime = savetime;
	}
	
}
package com.common.util;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method; 
import java.sql.Timestamp;
import java.util.Date;
import java.util.HashMap; 
import java.util.Iterator;
import java.util.Map; 
import java.util.TreeMap;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import org.apache.log4j.Logger;

/** 
*转换器 
*1:将JavaBean 转换成Map、JSONObject 
*2:将JSONObject 转换成Map 
* 
* @author xxx 
*/ 

public class BeanConverter 
{ 
	static Logger logger = Logger.getLogger(BeanConverter.class);  
	public static void main(String[] args) throws Exception {
		
		JsonConfig jsonConfig=new JsonConfig();
		Map<String,Object> classMap=new HashMap<String,Object>();
		jsonConfig.setClassMap(classMap);
		JsonDateValueProcessor jsonValueProcessor = new JsonDateValueProcessor();  
		jsonConfig.registerJsonValueProcessor(Date.class, jsonValueProcessor);  
		jsonConfig.registerJsonValueProcessor(java.sql.Date.class, jsonValueProcessor);  
		jsonConfig.registerJsonValueProcessor(Timestamp.class, jsonValueProcessor);  
		jsonConfig.registerJsonValueProcessor(Float.class, new JsonFloatValueProcessor()); 
		Person person=new Person();
		person.setId(1);
		person.setJine(999.34d);
		person.setJineMax(9.12d);
		person.setMax(10);
		person.setName("ctl");
		person.setPrice(1000.99f);
		person.setPriceMax(10.01f);
		person.setResult(true);
		person.setSavetime(new Date());
		person.setSuccess(false);
		Map<String, Object> data =new TreeMap<String, Object>();
	    transBean2Map(person, data);
	    Person personData=new Person();
	    System.out.println(data);
	    transMap2Bean(personData, data);
	    System.out.println(JSONObject.fromObject(personData,jsonConfig));
	}
     
    
    /** 
     * 将json对象转换成Map 
     * 
     * @param jsonObject json对象 
     * @return Map对象 
     */ 
    @SuppressWarnings("unchecked")
	public static Map<Object, Object> toMap(JSONObject jsonObject) 
    { 
        Map<Object, Object> result = new HashMap<Object, Object>(); 
        Iterator<Object> iterator = jsonObject.keys(); 
        Object key = null; 
        Object value = null; 
        while (iterator.hasNext()) 
        { 
            key = iterator.next(); 
            value = jsonObject.get(key); 
            result.put(key, value); 
        } 
        return result; 
    } 

    /** 
     * 将javaBean转换成JSONObject 
     * 
     * @param bean javaBean 
     * @return json对象 
     */ 
//    public static JSONObject toJSON(Object bean) 
//    { 
//        return new JSONObject(toMap(bean)); 
//    } 

    /** 
     * 将map转换成Javabean 
     * @param javabean javaBean 
     * @param data map数据 
     */ 
    public static Object toJavaBean(Object javabean, Map<Object, Object> data) 
    { 
        Method[] methods = javabean.getClass().getDeclaredMethods(); 
        for (Method method : methods){ 
        	String field =null;
            try { 
                if (method.getName().startsWith("set")){
                    field = method.getName(); 
                    field = field.substring(field.indexOf("set") + 3); 
                    field = field.toLowerCase().charAt(0) + field.substring(1); 
                    Object value=data.get(field);
                    if(value!=null){
	                    try {
	                    	method.invoke(javabean, new Object[]{(Object)value}); 
						} catch (Exception e) {
							method.invoke(javabean, new Object[]{Float.parseFloat(value.toString())}); 
						}
                    }
                } 
            }catch (Exception e){ 
            	logger.error(field+"类型为:"+field.getClass(),e);
            } 
        } 
        return javabean; 
    } 
    public static Map<String, Object> transBean2Map(Object obj,Map<String,Object> map) {
        if(obj == null){
            return null;
        }        
        try {
            BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            for (PropertyDescriptor property : propertyDescriptors) {
                String key = property.getName();
                // 过滤class属性
                if (!key.equals("class")) {
                    // 得到property对应的getter方法
                    Method getter = property.getReadMethod();
                    Object value = getter.invoke(obj);
                    if(null!=value&&!"".equals(value))
                    map.put(key, value);
                }

            }
        } catch (Exception e) {
        	logger.error("transBean2Map Error " , e);
        }
        return map;
    }
    
    
    public static Object transMap2Bean(Object javabean, Map<String, Object> data) 
    { 
        Method[] methods = javabean.getClass().getDeclaredMethods(); 
        for (Method method : methods){
            try{ 
                if (method.getName().startsWith("set")){
                    String field = method.getName(); 
                    field = field.substring(field.indexOf("set") + 3); 
                    field = field.toLowerCase().charAt(0) + field.substring(1); 
                    method.invoke(javabean, new Object[]{data.get(field)}); 
                } 
            }catch (Exception e){ 
            	logger.error(e);
            } 
        } 
        return javabean; 
    } 
    
    /** 
     * 将javaBean转换成JSONObject 
     * 
     * @param bean javaBean 
     * @return json对象 
     * @throws ParseException json解析异常 
     */ 
//    public static void toJavaBean(Object javabean, String data) throws ParseException 
//    { 
//        JSONObject jsonObject = new JSONObject(data); 
//        Map<String, String> datas = toMap(jsonObject); 
//        toJavaBean(javabean, datas); 
//    } 
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Protobuf(Protocol Buffers)是一种轻量级的数据交换格式,它可以用于结构化数据的序列化和反序列化。而JavaBean是Java语言中的一种编程规范,用于描述一个可重用的Java对象。 在将Protobuf与JavaBean进行互转时,可以通过以下几个步骤实现: 1. 定义Protobuf消息格式:首先需要定义一个.proto文件,其中定义了消息的字段和类型。例如,定义一个Person消息包含name和age字段: ``` syntax = "proto3"; message Person { string name = 1; int32 age = 2; } ``` 2. 使用Protoc编译器生成Java类:使用Protoc编译器将.proto文件编译成对应的Java类。执行以下命令生成Java类: ``` protoc --java_out=<output_directory> <proto_file>.proto ``` 3. 将Protobuf消息转换为JavaBean对象:使用生成的Java类,可以将Protobuf消息转换为JavaBean对象。例如,将Person消息转换为对应的JavaBean对象: ```java PersonProto.Person personProto = PersonProto.Person.newBuilder() .setName("John") .setAge(25) .build(); Person person = new Person(); person.setName(personProto.getName()); person.setAge(personProto.getAge()); ``` 4. 将JavaBean对象转换为Protobuf消息:反过来,可以将JavaBean对象转换为Protobuf消息。例如,将JavaBean对象转换为Person消息: ```java Person person = new Person(); person.setName("John"); person.setAge(25); PersonProto.Person.Builder personProtoBuilder = PersonProto.Person.newBuilder() .setName(person.getName()) .setAge(person.getAge()); PersonProto.Person personProto = personProtoBuilder.build(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值