這篇文章主要介紹了只返回實體類中的部分字段問題如何解決,具有一定借鑒價值,需要的朋友可以參考下。下面就和我一起來看看吧。
如何只返回實體類中的部分字段
在實體類上添加注解
@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,就會使用類注解的設置
java動態添加實體類字段并返回給前端
工具類
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了
以上就是只返回實體類中的部分字段問題如何解決的詳細內容了,看完之后是否有所收獲呢?如果想了解更多相關內容,歡迎來***行業資訊!