如何只返回實(shí)體類中的部分字段問題
如何只返回實(shí)體類中的部分字段
在實(shí)體類上添加注解
@JsonInclude(JsonInclude.Include.NON_EMPTY)
表示實(shí)體類中為null,空字符串,空集合數(shù)組等內(nèi)容不會(huì)被序列化,即不會(huì)返回字段和值。
以下為對(duì)注解所有取值的簡介
ALWAYS // 默認(rèn)策略,任何情況都執(zhí)行序列化 NON_NULL // 非空 NON_ABSENT // null的不會(huì)序列化,但如果類型是AtomicReference,依然會(huì)被序列化 NON_EMPTY // null、集合數(shù)組等沒有內(nèi)容、空字符串等,都不會(huì)被序列化 NON_DEFAULT // 如果字段是默認(rèn)值,就不會(huì)被序列化 CUSTOM // 此時(shí)要指定valueFilter屬性,該屬性對(duì)應(yīng)一個(gè)類,用來自定義判斷被JsonInclude修飾的字段是否序列化 USE_DEFAULTS // 當(dāng)JsonInclude在類和屬性上都有時(shí),優(yōu)先使用屬性上的注解,此時(shí)如果在序列化的get方法上使用了JsonInclude,并設(shè)置為USE_DEFAULTS,就會(huì)使用類注解的設(shè)置
java動(dòng)態(tài)添加實(shí)體類字段并返回給前端
工具類
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;
/**
* 動(dòng)態(tài)添加實(shí)體類字段
*/
@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;
}
/**
* 根據(jù)屬性生成對(duì)象
*/
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.獲取原對(duì)象的字段數(shù)組
PropertyDescriptor[] descriptorArr = propertyUtilsBean.getPropertyDescriptors(dest);
//2.遍歷原對(duì)象的字段數(shù)組,并將其封裝到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.將擴(kuò)展字段Map合并到原字段Map中
newValueMap.forEach((k, v) -> oldKeyMap.put(k, v.getClass()));
//4.根據(jù)新的字段組合生成子類對(duì)象
DynamicBean dynamicBean = new DynamicBean(dest.getClass(), oldKeyMap);
//5.放回合并后的屬性集合
newValueMap.forEach((k, v) -> {
try {
dynamicBean.setValue(k, v);
} catch (Exception e) {
log.error("動(dòng)態(tài)添加字段【值】出錯(cuò)", e);
}
});
return dynamicBean.getTarget();
}
}調(diào)用

前端接口調(diào)用測(cè)試

備注:前端表格直接for循環(huán)動(dòng)態(tài)渲染就OK了
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot任務(wù)調(diào)度器的實(shí)現(xiàn)代碼
SpringBoot自帶了任務(wù)調(diào)度器,通過注解的方式使用。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
Java C++題解leetcode 1684統(tǒng)計(jì)一致字符串的數(shù)目示例
這篇文章主要為大家介紹了Java C++題解leetcode 1684統(tǒng)計(jì)一致字符串的數(shù)目示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Java整型數(shù)與網(wǎng)絡(luò)字節(jié)序byte[]數(shù)組轉(zhuǎn)換關(guān)系詳解
這篇文章主要介紹了Java整型數(shù)與網(wǎng)絡(luò)字節(jié)序byte[]數(shù)組轉(zhuǎn)換關(guān)系,結(jié)合實(shí)例形式歸納整理了java整型數(shù)和網(wǎng)絡(luò)字節(jié)序的byte[]之間轉(zhuǎn)換的各種情況,需要的朋友可以參考下2017-08-08
Java實(shí)現(xiàn)Html轉(zhuǎn)Pdf的方法
這篇文章主要介紹了Java實(shí)現(xiàn)Html轉(zhuǎn)Pdf的方法,實(shí)例分析了java基于ITextRenderer類操作頁面及系統(tǒng)自帶字體生成pdf文件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
Springboot項(xiàng)目異常處理及返回結(jié)果統(tǒng)一
這篇文章主要介紹了Springboot項(xiàng)目異常處理及返回結(jié)果統(tǒng)一,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08
springboot整合shiro實(shí)現(xiàn)登錄驗(yàn)證授權(quán)的過程解析
這篇文章主要介紹了springboot整合shiro實(shí)現(xiàn)登錄驗(yàn)證授權(quán),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01
MyBatis-Plus如何通過注解使用TypeHandler
這篇文章主要介紹了MyBatis-Plus如何通過注解使用TypeHandler,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
java實(shí)現(xiàn)Composite組合模式的實(shí)例代碼
這篇文章主要介紹了java實(shí)現(xiàn)Composite組合模式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01

