java只返回實體類中的部分字段問題如何解決
java只返回實體類中的部分字段問題如何解決
本文講解"java只返回實體類中的部分字段問題怎么解決",希望能夠解決相關問題。
如何只返回實體類中的部分字段
在實體類上添加注解
@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 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 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 newvaluemap) throws invocationtargetexception, illegalaccessexception { propertyutilsbean propertyutilsbean = new propertyutilsbean(); //1.獲取原對象的字段數組 propertydescriptor[] descriptorarr = propertyutilsbean.getpropertydescriptors(dest); //2.遍歷原對象的字段數組,并將其封裝到map map 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了