jfinal record json转换问题

李晓楼 发布于 2017/04/24 16:31
阅读 1K+
收藏 0

@JFinal 你好,想跟你请教个问题:

我的数据库的字段是下划线形式的,我通过sql多表查询,返回的是:page<Record>,转换为json之后,json里面的字段都是下滑线形式的,我想把下滑线形式的字段转换为驼峰形式的,我的思路是对record进行操作。但是怎么都实现不了。请问还有别的实现思路吗?

非常感谢!

因为我在config里面做了如下配置,导致我对record的字段转换为驼峰形式重新设置之后,还是按照下划线形式输出:

// 配置ActiveRecord插件
        ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
        arp.setContainerFactory(new PropertyNameContainerFactory());

 

package com.cmpl.jxgl.common;

import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import com.jfinal.plugin.activerecord.IContainerFactory;
 
//XXX  新增类PropertyNameContainerFactory 驼峰下划线工厂类
@SuppressWarnings({ "rawtypes", "unchecked" })
public class PropertyNameContainerFactory implements IContainerFactory {
 
    public Object convert(Object key) {
        if (key instanceof String) {
            String property = null;
            String alias = null;
            if (((String) key).indexOf(".") > -1) {
                String[] properties = ((String) key).split("\\.");
                alias = properties[0];
                property = properties[1];
            } else {
                property = ((String) key);
            }
            StringBuilder buf = new StringBuilder(property);
            for (int i = 1; i < buf.length() - 1; i++) {
                if (Character.isLowerCase(buf.charAt(i - 1)) && Character.isUpperCase(buf.charAt(i))
                        && Character.isLowerCase(buf.charAt(i + 1))) {
                    buf.insert(i++, '_');
                }
            }
            return (alias != null ? alias + "." : "")
                    + (toUpperCase ? buf.toString().toUpperCase() : buf.toString().toLowerCase());
        }
        return key;
    }
 
    private static boolean toUpperCase = true;
 
    public PropertyNameContainerFactory() {
    }
 
    public PropertyNameContainerFactory(boolean toUpperCase) {
        PropertyNameContainerFactory.toUpperCase = toUpperCase;
    }
 
    public Map<String, Object> getAttrsMap() {
        return new PropertyNameMap();
    }
 
    public Map<String, Object> getColumnsMap() {
        return new PropertyNameMap();
    }
 
    public Set<String> getModifyFlagSet() {
        return new PropertyNameSet();
    }
 
    public class PropertyNameSet extends HashSet {
        private static final long serialVersionUID = 2337255096474815584L;
 
        public boolean add(Object e) {
            return super.add(convert(e));
        }
 
        public boolean remove(Object e) {
            return super.remove(convert(e));
        }
 
        public boolean contains(Object e) {
            return super.contains(convert(e));
        }
 
        public boolean addAll(Collection c) {
            boolean modified = false;
            for (Object o : c)
                if (super.add(convert(o)))
                    modified = true;
            return modified;
        }
    }
 
    public class PropertyNameMap extends HashMap {
        private static final long serialVersionUID = -4107018318847768335L;
 
        public Object get(Object key) {
            return super.get(convert(key));
        }
 
        public boolean containsKey(Object key) {
            return super.containsKey(convert(key));
        }
 
        public Object put(Object key, Object value) {
            return super.put(convert(key), value);
        }
 
        public void putAll(Map m) {
            for (Map.Entry e : (Set<Map.Entry>) (m.entrySet()))
                super.put(convert(e.getKey()), e.getValue());
        }
 
        public Object remove(Object key) {
            return super.remove(convert(key));
        }
    }
}
 

 

加载中
返回顶部
顶部