精品熟女碰碰人人a久久,多姿,欧美欧美a v日韩中文字幕,日本福利片秋霞国产午夜,欧美成人禁片在线观看

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了

相關文章