java 实体类互相转化

public static void copyFieldsTo(Object from, Object to) {
    Set<String> getFields = getGetFields(from.getClass());
    Set<String> fields = new HashSet();

    for (Method method : to.getClass().getMethods()) {
        String methodName = method.getName();
        if (methodName.startsWith("set")) {
            String name = getFieldName(method.getName());
            if (getFields.contains(name)) {
                fields.add(name);
            }
        }
    }
    try {
        for (String expression : fields) {
            Object value = Ognl.getValue(expression, from);
            if (value != null && !"".equals(value)) {
                Ognl.setValue(expression, to, value);
            }
        }
    } catch (Exception ex) {
        logger.error("异常",ex);
    }

}

前提 是 字段名相同

Java中,将字符串转化为对象实体类通常涉及反序列化操作或者是手动解析JSON/XML等格式的数据并映射到对应的JavaBean上。 ### 常见的方式包括: #### 1. 使用第三方库(推荐) 最常见的是使用像Jackson、Gson这样的库来进行JSON字符串与对象之间的相互转换。 ##### Jackson 示例: ```java ObjectMapper objectMapper = new ObjectMapper(); String json = "{\"name\":\"张三\",\"age\":25}"; User user = objectMapper.readValue(json, User.class); ``` ##### Gson 示例: ```java Gson gson = new Gson(); String json = "{\"name\":\"李四\",\"age\":30}"; User user = gson.fromJson(json, User.class); ``` #### 2. 手动解析 如果不想依赖外部框架,则需要自己编写逻辑来完成这一过程。这可能涉及到`split()`分割字符或者其他正则表达式匹配技术等等,但这种方式复杂度高且容易出错,因此较少采用。 例如对于简单的键值对形式的字符串: ```java public static <T> T convert(String str) throws Exception { if (str == null || "".equals(str.trim())) return null; Map<String,String> map = Arrays.stream(str.split("&")) .map(s -> s.split("=")) .collect(Collectors.toMap(a->a[0], a->URLDecoder.decode(a[1],"UTF-8"))); BeanInfo beanInfo = Introspector.getBeanInfo(clazz); for(PropertyDescriptor pd : beanInfo.getPropertyDescriptors()){ Method setterMethod = pd.getWriteMethod(); Object value = map.get(pd.getName()); Class<?> type = pd.getPropertyType(); if(value !=null){ try{ setterMethod.invoke(obj,type.cast(convertValue(type,value))); }catch(IllegalArgumentException e){ throw new RuntimeException(e); } } } } ``` 注意此段代码仅为示意图并非完整可用版本! --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值