Jackson 属性名修改

  1.  继承类

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.commons.collections.MapUtils;
    
    import com.fasterxml.jackson.databind.BeanDescription;
    import com.fasterxml.jackson.databind.SerializationConfig;
    import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
    import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
    import com.fasterxml.jackson.databind.util.NameTransformer;
    
    /**
     * 修改bean属性序列化时的名称
     * @author pengming
     * @Description 
     *
     * @Date  2015年7月28日 下午2:59:35
     */
    public class JacSerializerModifier extends BeanSerializerModifier {
    	
    	private PropertyNameTransformer propertyNameTransformer = new PropertyNameTransformer();
    
    	/**
    	 * 变更Jackson封装bean属性对象
    	 */
    	@Override
    	public List<BeanPropertyWriter> changeProperties(
    			SerializationConfig config, BeanDescription beanDesc,
    			List<BeanPropertyWriter> beanProperties) {
    		List<BeanPropertyWriter> vbeanProperties = new ArrayList<BeanPropertyWriter>(beanProperties);
    		beanProperties.clear();
    		for (BeanPropertyWriter beanPropertyWriter : vbeanProperties) {
    			// 修改属性名称
    			BeanPropertyWriter v = beanPropertyWriter.rename(propertyNameTransformer);
    			beanProperties.add(v);
    		}
    		return beanProperties;
    	}
    	
    
    	private static Map<String, String> propertyMapping = new HashMap<String, String>();
    	
    	static {
    		// 属性名称映射
    		propertyMapping.put("name", "propertyUserName");
    	}
    	
    	/**
    	 * 属性名称转换类
    	 * @author pengming
    	 * @Description 
    	 *
    	 * @Date  2016年7月28日 下午3:03:40
    	 */
    	private static class PropertyNameTransformer extends NameTransformer {
    
    		@Override
    		public String transform(String name) { // 返回新属性名称
    			return MapUtils.getString(propertyMapping, name, name);
    		}
    
    		@Override
    		public String reverse(String transformed) {
    			return transformed;
    		}
    	}
    	
    }
  2. 设置使用
    
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.setSerializerFactory(objectMapper.getSerializerFactory().withSerializerModifier(new JacSerializerModifier()));
  3. 结语

          此方法虽然可以修改掉属性名称,但从源码上看,这个是直接new 一个新的 BeanPropertyWriter 对象出来的,所以会在性能上会有点消耗!

 

转载于:https://my.oschina.net/mingpeng/blog/731760

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值