您好,登錄后才能下訂單哦!
這篇文章主要介紹了只返回實體類中的部分字段問題如何解決,具有一定借鑒價值,需要的朋友可以參考下。下面就和我一起來看看吧。
@JsonInclude(JsonInclude.Include.NON_EMPTY)
表示實體類中為null,空字符串,空集合數組等內容不會被序列化,即不會返回字段和值。
ALWAYS // 默認策略,任何情況都執行序列化 NON_NULL // 非空 NON_ABSENT // null的不會序列化,但如果類型是AtomicReference,依然會被序列化 NON_EMPTY // null、集合數組等沒有內容、空字符串等,都不會被序列化 NON_DEFAULT // 如果字段是默認值,就不會被序列化 CUSTOM // 此時要指定valueFilter屬性,該屬性對應一個類,用來自定義判斷被JsonInclude修飾的字段是否序列化 USE_DEFAULTS // 當JsonInclude在類和屬性上都有時,優先使用屬性上的注解,此時如果在序列化的get方法上使用了JsonInclude,并設置為USE_DEFAULTS,就會使用類注解的設置
package com.bless.wms.utils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.beanutils.PropertyUtilsBean; import org.springframework.cglib.beans.BeanGenerator; import org.springframework.cglib.beans.BeanMap; import java.beans.PropertyDescriptor; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Map; /** * 動態添加實體類字段 */ @Slf4j public final class PropertyAppender { private static final class DynamicBean { private Object target; private BeanMap beanMap; private DynamicBean(Class superclass, Map<String, Class> propertyMap) { this.target = generateBean(superclass, propertyMap); this.beanMap = BeanMap.create(this.target); } private void setValue(String property, Object value) { beanMap.put(property, value); } private Object getValue(String property) { return beanMap.get(property); } private Object getTarget() { return this.target; } /** * 根據屬性生成對象 */ private Object generateBean(Class superclass, Map<String, Class> propertyMap) { BeanGenerator generator = new BeanGenerator(); if (null != superclass) { generator.setSuperclass(superclass); } BeanGenerator.addProperties(generator, propertyMap); return generator.create(); } } public static Object generate(Object dest, Map<String, Object> newValueMap) throws InvocationTargetException, IllegalAccessException { PropertyUtilsBean propertyUtilsBean = new PropertyUtilsBean(); //1.獲取原對象的字段數組 PropertyDescriptor[] descriptorArr = propertyUtilsBean.getPropertyDescriptors(dest); //2.遍歷原對象的字段數組,并將其封裝到Map Map<String, Class> oldKeyMap = new HashMap<>(); for (PropertyDescriptor it : descriptorArr) { if (!"class".equalsIgnoreCase(it.getName())) { oldKeyMap.put(it.getName(), it.getPropertyType()); newValueMap.put(it.getName(), it.getReadMethod().invoke(dest)); } } //3.將擴展字段Map合并到原字段Map中 newValueMap.forEach((k, v) -> oldKeyMap.put(k, v.getClass())); //4.根據新的字段組合生成子類對象 DynamicBean dynamicBean = new DynamicBean(dest.getClass(), oldKeyMap); //5.放回合并后的屬性集合 newValueMap.forEach((k, v) -> { try { dynamicBean.setValue(k, v); } catch (Exception e) { log.error("動態添加字段【值】出錯", e); } }); return dynamicBean.getTarget(); } }
備注:前端表格直接for循環動態渲染就OK了
以上就是只返回實體類中的部分字段問題如何解決的詳細內容了,看完之后是否有所收獲呢?如果想了解更多相關內容,歡迎來億速云行業資訊!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。