webservice中应用的一些常用的方法

1.将xml转换成map:

public static Map parseXmlToMap(Document documnet) {
        Map map = new HashMap();
        Element rootElt = documnet.getRootElement();    //获取根节点
     List nodes = rootElt.elements();  //获取根节点下的所有子节点
     for (Iterator it = nodes.iterator(); it.hasNext();) {
            Element elm = (Element) it.next();  //获取子节点对象
            map.put(elm.getName(), elm.getStringValue());    //将子节点放于map中
     }
        return map;
    }

 2.将map转换成xml:

    public static Document parseMapToXml(Map map) {
        Document document = DocumentHelper.createDocument();
        Element nodeElement = document.addElement("res");
        for (Object obj : map.keySet()) {
            Element keyElement = nodeElement.addElement(String.valueOf(obj));
            keyElement.setText(String.valueOf(map.get(obj)));
        }
        return document;
    }

3将map转成实体bean:

public static <T> T createBean(Map map, Class<T> cls) {
        JSONObject json = JSONObject.fromObject(map);
        return BeanUtil.createBean(json.toString(), cls);
    }

4.将bean转换成map形式:

public static Document beanToXml(Object obj) {
        try {
            Map hashMap = new HashMap();
            hashMap = BeanUtils.describe(obj);
            hashMap.remove("class");
            return parseMapToXml(hashMap);
        }
        catch (Exception e) {
            return null;
        }
    }

 5.BeanUtil类:

public class BeanUtil {

    private static final Log logger = LogFactory.getLog(BeanUtil.class);


    static {
        DateConverter dc = new DateConverter();
        String[] datePattern = {"yyyy-MM-dd", "yyyy-MM-dd HH:mm", "yyyy-MM-dd HH:mm:ss"};
        dc.setPatterns(datePattern);
        ConvertUtils.register(dc, Date.class);
    }


    public static Map toMap(Object bean) {
        return bean != null ? new BeanMap(bean) : null;
    }



    /**
     * 属性值去空处理
     *
     * @param map
     * @return
     */
    public static Map trimMap(Map map) {
        for (Object o : map.entrySet()) {
            Map.Entry me = (Map.Entry) o;
            map.put(me.getKey(), me.getValue().toString().trim());
        }
        return map;
    }


    /**
     * 将请求参数封装成Bean对象
     *
     * @param request 请求
     * @param cls     类class
     * @return Object
     */
    public static <T> T createBean(HttpServletRequest request, Class<T> cls) {
        try {
            T obj = cls.newInstance();
            Map map = request.getParameterMap();
            BeanUtils.populate(obj, map);
            return obj;
        } catch (Exception e) {
            logger.error(e.getMessage());
            return null;
        }
    }

    /**
     * 将以json方式提交的字符串封装成Bean对象
     *
     * @param json json对象
     * @param cls  bean的class
     * @return Object
     */
    public static <T> T createBean(String json, Class<T> cls) {
        if (json == null) return null;
        ObjectMapper mapper = new ObjectMapper();
        mapper.getDeserializationConfig().disable(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);
        mapper.getDeserializationConfig().setDateFormat(new DateFormat());
        try {
            return mapper.readValue(json, cls);
        } catch (IOException e) {
            logger.error(e.getMessage());
            return null;
        }
    }

    /**
     * 将以json方式提交的字符串封装成Bean对象
     *
     * @param json     json对象
     * @param javaType bean的class
     * @return Object
     */
    @SuppressWarnings({"unchecked"})
    public static <T> T createBean(String json, JavaType javaType) {
        if (json == null) return null;
        ObjectMapper mapper = new ObjectMapper();
        mapper.getDeserializationConfig().disable(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);
        mapper.getDeserializationConfig().setDateFormat(new DateFormat());
        try {
            return (T) mapper.readValue(json, javaType);
        } catch (IOException e) {
            logger.error(e.getMessage());
            return null;
        }
    }

    /**
     * 将json 数组封装成 arrays
     *
     * @param json json数组
     * @param cls  类名
     * @return T[]
     */
    @SuppressWarnings({"unchecked"})
    public static <T> T createArray(String json, Class cls) {
        if (json == null) return null;
        return (T) createBean(json, TypeFactory.arrayType(cls));
    }


    /**
     * 将以json方式提交的字符串封装成Bean集合
     *
     * @param jsonArray json数组
     * @param cls       bean的class
     * @return List
     */
    public static <T> List<T> createBeanList(String jsonArray, Class<T> cls) {
        if (jsonArray == null) return null;
        ObjectMapper mapper = new ObjectMapper();
        mapper.getDeserializationConfig().disable(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);
        mapper.getDeserializationConfig().setDateFormat(new DateFormat());
        try {
            return mapper.readValue(jsonArray, TypeFactory.collectionType(List.class, cls));
        } catch (IOException e) {
            logger.error(e.getMessage());
            return null;
        }
    }


    /**
     * 对象转换json字符串
     *
     * @param obj 对象
     * @return String
     */
    public static String toJsonString(Object obj) {
        if (obj == null) return null;
        ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally

        mapper.getSerializationConfig().setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
        mapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
        mapper.getSerializationConfig().setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));

        try {
            StringWriter sb = new StringWriter();
            mapper.writeValue(sb, obj);
            return sb.toString();
        } catch (IOException e) {
            logger.error(e.getMessage());
            return null;
        }
    }

    public static String listToJsonString(List list) {
        StringBuffer buf = new StringBuffer("[");
        if (list != null) {
            String flag = "";
            for (Object obj : list) {
                if (!(obj instanceof Map)) break;
                Map map = (Map) obj;
                Iterator it = map.entrySet().iterator();
                String mFlag = "";
                buf.append(flag).append("{");
                while (it.hasNext()) {
                    Map.Entry m = (Map.Entry) it.next();
                    buf.append(mFlag).append(m.getKey().toString()).append(":");
                    if (m.getValue() == null) {
                        buf.append("''");
                    } else if (m.getValue() instanceof Date) {
/*                    SimpleDateFormat simple = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
                    buf.append("new Date('").append(simple.format((Date)m.getValue())).append("')");*/
                        buf.append("'").append(DateUtil.timeToStr((Date) m.getValue())).append("'");
                    } else {
                        buf.append("'").append(m.getValue().toString()).append("'");
                    }
                    mFlag = ",";
                }
                buf.append("}");
                flag = ",";
            }
        }
        buf.append("]");
        return buf.toString();
    }

    /**
     * 将Map封装成json序列对象
     *
     * @param mapping 映射对象
     * @return JSONObject
     */
    public static JSONObject createJSONObject(Map mapping) {
        if (mapping == null) return null;
        JSONObject jsonObject = new JSONObject();
        for (Object key : mapping.keySet()) {
            Object value = mapping.get(key);
            if (value == null) {
                jsonObject.put((String) key, "");
            }
            if (value instanceof Object[]) {
                Object[] obj = (Object[]) mapping.get((String) key);
                String[] array_value = (String[]) convertArray(obj, String.class);
                jsonObject.put((String) key, array_value == null ? "" : array_value);
            } else {
                String string_value = mapping.get((String) key).toString();
                jsonObject.put((String) key, string_value == null ? "" : string_value);
            }
        }
        return jsonObject;
    }

    /**
     * 将list<BasicMapping>集合对象封装成json序列对象数组
     *
     * @param list 映射对象集合
     * @return JSONArray
     */
    public static JSONArray createJSONArray(List<Map> list) {
        JSONArray jsonArray = null;
        JSONObject jsonObject;
        if (list != null) {
            jsonArray = new JSONArray();
            for (Map mapping : list) {
                jsonObject = createJSONObject(mapping);
                jsonArray.add(jsonObject);
            }
        }
        return jsonArray;
    }


    public static Object[] convertArray(Object[] objects, Class returnClass) {
        if (objects == null) return null;
        Object[] returnArray = null;
        if (returnClass.isAssignableFrom(String.class)) returnArray = new String[objects.length];
        if (returnClass.isAssignableFrom(Boolean.class)) returnArray = new Boolean[objects.length];
        if (returnClass.isAssignableFrom(Date.class)) returnArray = new Date[objects.length];
        if (returnClass.isAssignableFrom(BigDecimal.class)) returnArray = new BigDecimal[objects.length];
        if (returnClass.isAssignableFrom(Double.class)) returnArray = new Double[objects.length];
        if (returnClass.isAssignableFrom(Float.class)) returnArray = new Float[objects.length];
        if (returnClass.isAssignableFrom(Long.class)) returnArray = new Long[objects.length];
        if (returnClass.isAssignableFrom(Integer.class)) returnArray = new Integer[objects.length];
        if (returnClass.isAssignableFrom(Short.class)) returnArray = new Short[objects.length];
        if (returnArray != null) {
            for (int i = 0; i < objects.length; i++) {
                returnArray[i] = convertObject(objects[i], returnClass);
            }
            return returnArray;
        } else {
            return null;
        }
    }

    /**
     * 将值按照指定的类型转型
     *
     * @param value       值
     * @param returnClass 返回的class类型
     * @return 返回实例
     */

    protected static Object convertObject(Object value, Class returnClass) {
        if (value == null) return null;
        try {
            if (returnClass.isAssignableFrom(String.class)) {
                if (value instanceof String) return value;
                if (value instanceof Boolean) return value.toString();
                if (value instanceof Date) {
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    sdf.setLenient(false);
                    return sdf.format(value);
                }
                if (value instanceof BigDecimal) return ((BigDecimal) value).toPlainString();
                if (value instanceof Double) return (new BigDecimal((Double) value)).toPlainString();
                if (value instanceof Float) return (new BigDecimal((Float) value)).toPlainString();
                if (value instanceof Long) return value.toString();
                if (value instanceof Integer) return value.toString();
                if (value instanceof Short) return value.toString();
            } else if (returnClass.isAssignableFrom(Boolean.class)) {
                if (value instanceof Boolean) return value;
                if (value instanceof String) {
                    return value.equals("true");
                }
            } else if (returnClass.isAssignableFrom(Date.class)) {
                if (value instanceof Date) return value;
                if (value instanceof String) {
                    SimpleDateFormat formatter;
                    String stringValue = (String) value;
                    if (stringValue.length() == 10) formatter = new SimpleDateFormat("yyyy-MM-dd");
                    else if (stringValue.length() == 16) formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                    else if (stringValue.length() == 19) formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    else return null;
                    formatter.setLenient(false);
                    return formatter.parse(stringValue);
                }
            } else if (returnClass.isAssignableFrom(BigDecimal.class)) {
                if (value instanceof BigDecimal) return value;
                if (value instanceof Double) return new BigDecimal((Double) value);
                if (value instanceof Float) return new BigDecimal((Float) value);
                if (value instanceof Long) return new BigDecimal((Long) value);
                if (value instanceof Integer) return new BigDecimal((Integer) value);
                if (value instanceof Short) return new BigDecimal((Short) value);
                if (value instanceof String) return new BigDecimal((String) value);
            } else if (returnClass.isAssignableFrom(Double.class)) {
                if (value instanceof Number) return ((Number) value).doubleValue();
                if (value instanceof String) return (new BigDecimal((String) value)).doubleValue();
            } else if (returnClass.isAssignableFrom(Float.class)) {
                if (value instanceof Number) return ((Number) value).floatValue();
                if (value instanceof String) return (new BigDecimal((String) value)).floatValue();

            } else if (returnClass.isAssignableFrom(Long.class)) {
                if (value instanceof Number) return ((Number) value).longValue();
                if (value instanceof String) return (new BigDecimal((String) value)).longValue();
            } else if (returnClass.isAssignableFrom(Integer.class)) {
                if (value instanceof Number) return ((Number) value).intValue();
                if (value instanceof String) return (new BigDecimal((String) value)).intValue();
            } else if (returnClass.isAssignableFrom(Short.class)) {
                if (value instanceof Number) return ((Number) value).shortValue();
                if (value instanceof String) return (new BigDecimal((String) value)).shortValue();
            } else {
                return null;
            }
        }
        catch (Exception e) {
            logger.error(e.getMessage());
//      return null;
        }
        return null;
    }

    public static void main(String[] args) throws IllegalAccessException, InvocationTargetException, IOException {

        //Class cls = LinkedHashMap.class;
        Map map = new HashMap();
        map.put("a", " 1 ");
        map.put("b", " 2 ");
        map.put("c", " 3 ");

//        JSONObject jsonObject = BeanUtil.createJSONObject(map);
//        System.out.println(jsonObject.toString());
//
//        List list = new ArrayList();
//        list.add(map);
//        JSONArray jsonArray = BeanUtil.createJSONArray(list);
//        System.out.println(jsonArray.toString());
        //BeanUtil.trimMap(map);
    }

}


class DateConverter extends DateTimeConverter {

    DateConverter() {
    }

    DateConverter(Object o) {
        super(o);
    }

    @Override
    protected Object convertToType(Class aClass, Object o) {
        try {
            return super.convertToType(aClass, o);
        } catch (Exception e) {
            return null;
        }
    }

    protected Class getDefaultType() {
        return Date.class;
    }
}

猜你喜欢

转载自panmingzhi0815.iteye.com/blog/1168360