object转map

在Java中,将Object转换为Map的方法有多种,以下是一些常见的方法:

  1. 使用Java反射机制
  • 通过Java反射机制获取Object的所有字段,然后将字段名作为key,字段值作为value,存储到Map中1
    public static Map<String, Object> objectToMap(Object obj) throws IllegalAccessException {
        Map<String, Object> map = new HashMap<>();
        Class<?> clazz = obj.getClass();
        for (Field field : clazz.getDeclaredFields()) {
            field.setAccessible(true);
            map.put(field.getName(), field.get(obj));
        }
        return map;
    }
    ```

2. **使用JavaBean的get方法** :

- 通过JavaBean的get方法获取Object的属性值,然后将属性名作为key,属性值作为value,存储到Map中<b class="card40_249__sup_a7f6" data-sup="sup">1</b>。

```java
    public static Map<String, Object> objectToMap(Object obj) throws IntrospectionException, IllegalAccessException, InvocationTargetException {
        Map<String, Object> map = new HashMap<>();
        Class<?> clazz = obj.getClass();
        for (PropertyDescriptor pd : Introspector.getBeanInfo(clazz).getPropertyDescriptors()) {
            String propertyName = pd.getName();
            Method getter = pd.getReadMethod();
            Object value = getter.invoke(obj);
            map.put(propertyName, value);
        }
        return map;
    }
    ```

3. **使用Jackson库** :

- 通过Jackson库的`ObjectMapper`类将Object转换为Map<b class="card40_249__sup_a7f6" data-sup="sup">3</b>。

```java
    import com.fasterxml.jackson.databind.ObjectMapper;

    public static Map<String, Object> objectToMap(Object obj) throws Exception {
        ObjectMapper objectMapper = new ObjectMapper();
        return objectMapper.convertValue(obj, Map.class);
    }
    ```

4. **使用Gson库** <b class="card40_249__sup_a7f6" data-sup="sup">8</b>:

- 通过Gson库将Object转换为Map。

```java
    import com.google.gson.Gson;

    public static Map<String, Object> objectToMap(Object obj) {
        Gson gson = new Gson();
        return gson.fromJson(gson.toJson(obj), Map.class);
    }
    ```

5. **使用Guava库** <b class="card40_249__sup_a7f6" data-sup="sup">3</b>:

- 通过Guava库的`CaseFormat`将驼峰命名转换为下划线命名,并将Object转换为Map<b class="card40_249__sup_a7f6" data-sup="sup">6</b>。

```java
    import com.google.common.base.CaseFormat;
    import com.google.common.base.Converter;

    public static Map<String, Object> objectToMap(Object obj) throws Exception {
        Converter<String, String> converter = CaseFormat.LOWER_CAMEL.converterTo(CaseFormat.UPPER_UNDERSCORE);
        Map<String, Object> map = new LinkedHashMap<>();
        Field[] fields = obj.getClass().getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            String fieldName = converter.convert(field.getName());
            map.put(fieldName, field.get(obj));
        }
        return map;
    }
    ```

6. **使用HttpServletRequest的getParameterMap()** <b class="card40_249__sup_a7f6" data-sup="sup">7</b>:

- 如果Object是一个HTTP请求的参数对象,可以使用`getParameterMap()`方法将其转换为Map<b class="card40_249__sup_a7f6" data-sup="sup">3</b>。

```java
    import javax.servlet.http.HttpServletRequest;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;

    public static Map<String, String> getParameterMap(HttpServletRequest request) {
        Map<String, String[]> properties = request.getParameterMap();
        Map<String, String> returnMap = new HashMap<>();
        Iterator<Entry<String, String[]>> iter = properties.entrySet().iterator();
        while (iter.hasNext()) {
            Entry<String, String[]> entry = iter.next();
            String name = entry.getKey();
            String[] values = entry.getValue();
            String value = (values != null && values.length > 0) ? values : "";
            returnMap.put(name, value);
        }
        return returnMap;
    }
    ```

### 建议<b class="card40_249__sup_a7f6" data-sup="sup">2</b>

- **选择合适的方法** :根据具体需求和场景选择最合适的方法。如果对象是一个JavaBean,使用JavaBean的get方法或反射机制可能更简单<b class="card40_249__sup_a7f6" data-sup="sup">1</b>。如果<b class="card40_249__sup_a7f6" data-sup="sup">2</b>
Top