java 两个对象copy,并移除或添加一些属性
2022/1/17 20:07:50
本文主要是介绍java 两个对象copy,并移除或添加一些属性,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
目前遇到了 后端查到的数据和我想给前端返回的数据 不太一致的困惑。
因为不想因为返回给前端少一个字段,我这边就用不成了select *。
所以听了@朱杰
大佬的建议,这样搞。
其实这样我也不满意 因为为此还建立了个vo类,但是没办法,java是面向对象的,不想我们js那么随意
方法1
List<Article> list = articleService.list(); // 原始数据Article类型 List<ArticleVO> articleVOS = new ArrayList<>(); // 需要创建ArticleVO类型 for (Article article : list) { ArticleVO articleVO = new ArticleVO(); // 利用这个方法进行 两个类型匹配 copy操作 BeanUtils.copyProperties(article,articleVO); articleVOS.add(articleVO); }
当然也可以这样,不过这个真的蠢得不能再蠢了
List<Article> list = articleService.list(); // 原始数据Article类型 List<ArticleVO> articleVOS = new ArrayList<>(); // 需要创建ArticleVO类型 for (Article article : list) { article.setContent(null); }
方法2
使用封装的工具类,方便其它地方使用
List<Article> list = articleService.list(); List<ArticleVO> articleVOS = JsonUtils.json2Object(JsonUtils.object2Json(list),List.class);
JsonUtils工具类代码如下:
package com.dshvv.blogserver.utils; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonGenerationException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.type.MapLikeType; import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; /** * @author xxx * @version 1.0.0 * @date 2022/08/06 11:47 * @since 1.0.0 */ public class JsonUtils { private static final ObjectMapper objectMapper; static { objectMapper = new ObjectMapper(); //序列化时候统一日期格式 objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); //设置null时候不序列化(只针对对象属性) objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); //反序列化时,属性不存在的兼容处理 objectMapper.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); // 设置此属性,表示序列化字段是,如果有字段匹配失败,不会抛出异常 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); //单引号处理 objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, Boolean.TRUE); objectMapper.registerModule(new ParameterNamesModule()) .registerModule(new Jdk8Module()) .registerModule(new JavaTimeModule()); /** * 解决 * com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.ArrayList` out of START_OBJECT token * 错误 */ objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); } private JsonUtils() { } public static List<Object> json2List(String jsonStr) { JavaType javaType = objectMapper.getTypeFactory().constructCollectionType(ArrayList.class, Object.class); try { return objectMapper.readValue(jsonStr, javaType); } catch (IOException ex) { } return Collections.emptyList(); } public static Map<String, Object> json2Map(String jsonStr) { MapLikeType mapLikeType = objectMapper.getTypeFactory().constructMapLikeType(HashMap.class, String.class, Object.class); try { return objectMapper.readValue(jsonStr, mapLikeType); } catch (IOException ex) { } return new HashMap<>(); } public static <T> T json2Object(String json, Class<T> clazz) { try { return objectMapper.readValue(json, clazz); } catch (JsonProcessingException ex) { } return null; } public static <T> T json2Object(String json, TypeReference<T> type) { try { return objectMapper.readValue(json, type); } catch (JsonProcessingException ex) { } return null; } public static <T> String object2Json(T entity) { try { return objectMapper.writeValueAsString(entity); } catch (JsonGenerationException ex) { } catch (JsonMappingException ex) { } catch (IOException ex) { } return null; } public static <T> List<T> parseArray(String jsonString, Class<T> type) { try { JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, type); return objectMapper.readValue(jsonString, javaType); } catch (IOException ex) { throw new IllegalArgumentException("parse json fail:" + jsonString, ex); } } }
这篇关于java 两个对象copy,并移除或添加一些属性的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22项目:远程温湿度检测系统
- 2024-12-21《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介
- 2024-12-21后台管理系统开发教程:新手入门全指南
- 2024-12-21后台开发教程:新手入门及实战指南
- 2024-12-21后台综合解决方案教程:新手入门指南
- 2024-12-21接口模块封装教程:新手必备指南
- 2024-12-21请求动作封装教程:新手必看指南
- 2024-12-21RBAC的权限教程:从入门到实践
- 2024-12-21登录鉴权实战:新手入门教程
- 2024-12-21动态权限实战入门指南