国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot 更新業(yè)務(wù)場景下,如何區(qū)分null是清空屬性值 還是null為vo屬性默認(rèn)值?

這篇具有很好參考價(jià)值的文章主要介紹了SpringBoot 更新業(yè)務(wù)場景下,如何區(qū)分null是清空屬性值 還是null為vo屬性默認(rèn)值?。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

先看歧義現(xiàn)象

值為null
SpringBoot 更新業(yè)務(wù)場景下,如何區(qū)分null是清空屬性值 還是null為vo屬性默認(rèn)值?,SpringMVC,SpringBoot,框架,spring boot,后端,java

SpringBoot 更新業(yè)務(wù)場景下,如何區(qū)分null是清空屬性值 還是null為vo屬性默認(rèn)值?,SpringMVC,SpringBoot,框架,spring boot,后端,java
未傳遞此屬性
SpringBoot 更新業(yè)務(wù)場景下,如何區(qū)分null是清空屬性值 還是null為vo屬性默認(rèn)值?,SpringMVC,SpringBoot,框架,spring boot,后端,java
SpringBoot 更新業(yè)務(wù)場景下,如何區(qū)分null是清空屬性值 還是null為vo屬性默認(rèn)值?,SpringMVC,SpringBoot,框架,spring boot,后端,java
所以此時(shí)如何區(qū)分null 時(shí)傳遞進(jìn)來的的null,還是屬性的默認(rèn)值null?

引入方案

引入過濾器,中間截獲requestBodyData并保存到HttpServletRequest,業(yè)務(wù)層從HttpServletRequest 獲取到requestBodyData輔助判斷此屬性為未傳遞還是值為null

第1步:定義并注冊過濾器

自定義過濾器截獲requestBodyData并保存到HttpServletRequest

import com.practisesvr.utils.http.FilterHttpServletRequest;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.GenericFilterBean;

import java.io.IOException;

@Component
public class RequestCheckFilter extends GenericFilterBean {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.err.println("***RequestHeaderCheckFilter.doFilter.start***");

        if (!(request instanceof HttpServletRequest)) {
            throw new IllegalStateException("Expected HttpServletRequest");
        }

        HttpServletRequest httpRequest = (HttpServletRequest) request;
        FilterHttpServletRequest filterHttpRequest = new FilterHttpServletRequest(httpRequest);
        String body = filterHttpRequest.getBody();
        filterHttpRequest.setAttribute("requestBodyData", body);
        
        // 繼續(xù)執(zhí)行filter鏈
        chain.doFilter(filterHttpRequest, response);

        System.err.println("***RequestHeaderCheckFilter.doFilter.end***");
    }
}

[Ref: 過濾器使用到 HttpServletRequestWrapper 參考如下 ] What is HttpServletRequestWrapper does?

注冊過濾器

@Configuration
public class AppConfig {
    @Bean
    public FilterRegistrationBean<RequestCheckFilter> requestCheckFilterRegistration() {
        FilterRegistrationBean<RequestCheckFilter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new RequestCheckFilter());
        // 可以設(shè)置過濾器名稱
        registration.setName("requestCheckFilter");
        // 設(shè)置攔截規(guī)則
        registration.addUrlPatterns("/*"); // 攔截所有請求
        // 設(shè)置過濾器執(zhí)行順序,默認(rèn)為0,數(shù)值越小優(yōu)先級越高
        registration.setOrder(2);
        return registration;
    }
}

第2步:從HttpServletRequest 獲取到requestBodyData

public class RequestIUtils {
    /**
     * 從當(dāng)前請求上下文中獲取并解析請求體數(shù)據(jù),將其轉(zhuǎn)換為Map類型對象.
     *
     * @return 如果成功獲取到請求體數(shù)據(jù)并轉(zhuǎn)換成功,則返回一個(gè)包含請求體內(nèi)容的Map對象;
     * 若RequestAttributes不存在或請求體數(shù)據(jù)為空,則返回一個(gè)新的空HashMap對象。
     */
    public static Map<String, Object> getRequestBodyBody() {
        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
        if (requestAttributes == null) {
            return new HashMap<>();
        }
        HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();

        Object requestBody = request.getAttribute("requestBodyData");
        if (requestBody == null) {
            return new HashMap<>();
        }
        return JsonUtils.jsonToT(requestBody.toString(), Map.class);
    }
}    

第3步:業(yè)務(wù)層使用requestBodyData輔助判斷

@Override
public Student update(Student student) {
    Map<String, Object> requestBody = RequestIUtils.getRequestBodyBody();
    
    Student stu = new Student();
    stu.setId(student.getId());
    stu.setUsername(student.getUsername());
    stu.setPassword(student.getPassword());
    stu.setAge(student.getAge());
    stu.setHeight(student.getHeight());
    stu.setGender(student.getGender());
    // 使用方式
    if (requestBody.containsKey("classId")){
        stu.setClassId(student.getClassId());
    }
    stu.setIsDelete(student.getIsDelete());
    
    this.studentsMapper.update(student);
    return this.queryById(student.getId());
}

SpringBoot 更新業(yè)務(wù)場景下,如何區(qū)分null是清空屬性值 還是null為vo屬性默認(rèn)值?,SpringMVC,SpringBoot,框架,spring boot,后端,java

SpringBoot 更新業(yè)務(wù)場景下,如何區(qū)分null是清空屬性值 還是null為vo屬性默認(rèn)值?,SpringMVC,SpringBoot,框架,spring boot,后端,java
SpringBoot 更新業(yè)務(wù)場景下,如何區(qū)分null是清空屬性值 還是null為vo屬性默認(rèn)值?,SpringMVC,SpringBoot,框架,spring boot,后端,java

SpringBoot 更新業(yè)務(wù)場景下,如何區(qū)分null是清空屬性值 還是null為vo屬性默認(rèn)值?,SpringMVC,SpringBoot,框架,spring boot,后端,java文章來源地址http://www.zghlxwxcb.cn/news/detail-800929.html

到了這里,關(guān)于SpringBoot 更新業(yè)務(wù)場景下,如何區(qū)分null是清空屬性值 還是null為vo屬性默認(rèn)值?的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • vuejs清空表單數(shù)據(jù)、刪除對象中的空屬性公共方法

    對于復(fù)雜數(shù)據(jù),使用element自帶的方法可能不能滿足我們的需求,所以可以封裝一個(gè)公共方法在全局。 一、清空表單數(shù)據(jù): 二、刪除對象中的空屬性:

    2024年02月13日
    瀏覽(24)
  • SpringBoot如何讓業(yè)務(wù)Bean優(yōu)先于其他Bean加載

    本博客原文地址:https://ntopic.cn/p/2023090901/ 源代碼先行: Gitee本文介紹的完整倉庫:https://gitee.com/obullxl/ntopic-boot GitHub本文介紹的完整倉庫:https://github.com/obullxl/ntopic-boot 今天走讀一個(gè)應(yīng)用程序代碼,發(fā)現(xiàn)一個(gè)有趣的現(xiàn)象:有多個(gè)不同的業(yè)務(wù)Bean中均依賴了一個(gè)參數(shù)工具類Para

    2024年02月09日
    瀏覽(23)
  • 打包時(shí),自動(dòng)更新版本號,清空緩存

    打包時(shí),自動(dòng)更新版本號,清空緩存

    1.創(chuàng)建 addVersion.js 文件 2.修改package.json 文件 serve 執(zhí)行為測試用的,看版本是否生效 打包更新版本號,只需配置 build 相關(guān)指令即可 main.js 文件中添加 清除緩存功能 ok 完成以上執(zhí)行 查看 package.json 中是否改變 ,結(jié)束

    2024年02月02日
    瀏覽(19)
  • java實(shí)體類屬性值為null不返回或者某個(gè)屬性不返回

    java實(shí)體類屬性值為null不返回或者某個(gè)屬性不返回

    java實(shí)體類值為null或者無關(guān)緊要的屬性,也返回給了前端,看起來不太高明??梢允褂肑sonInclude注解或者JsonField注解過濾掉。 用在實(shí)體類前或者屬性前都可以。 用在屬性前。 以上示例中,當(dāng)total為null時(shí)不返回,適用于沒有分頁的情況。

    2024年02月12日
    瀏覽(30)
  • java后端返回?cái)?shù)據(jù)給前端時(shí)去除值為空或NULL的屬性、忽略某些屬性

    java后端返回?cái)?shù)據(jù)給前端時(shí)去除值為空或NULL的屬性、忽略某些屬性

    目錄 一、使用場景 二、環(huán)境準(zhǔn)備 1、引入依賴 2、實(shí)體類 三、示例 1、不返回空值 (1)方式 (2)測試 (3)說明 2、不返回部分屬性 (1)方式 (2)測試 四、?Jackson常用注解 1、 @JsonProperty 2、@JsonPropertyOrder 3、@JsonInclude 4、@JsonIgnoreProperties 5、@JsonFormat 6、@JsonUnwrapped ????????在開發(fā)過程

    2024年02月04日
    瀏覽(25)
  • Coalesce:處理Null值,返回傳入的多個(gè)字段(屬性)中第一個(gè)非空的值

    Coalesce函數(shù)是SQL中的一個(gè)函數(shù),用于返回參數(shù)列表中第一個(gè)非空的表達(dá)式的值。Coalesce函數(shù)接受兩個(gè)或多個(gè)參數(shù),它會按順序依次檢查每個(gè)參數(shù),返回第一個(gè)非空的參數(shù)值。如果所有參數(shù)都為空,則返回NULL。 Coalesce函數(shù)可以用于在SQL中處理空值的情況。在實(shí)際的數(shù)據(jù)處理中,

    2024年02月09日
    瀏覽(36)
  • MyBatis-plus更新對象時(shí)將字段值更新為null

    ????????mybatis-plus在執(zhí)行更新操作,當(dāng)更新字段為 空字符串 或者 null 的則不會執(zhí)行更新。如果要將指定字段更新null,可以通過以下三種方式實(shí)現(xiàn)。 1、全局配置 ????????可以在 application.yml 配置文件中注入配置 GlobalConfiguration 屬性 update-strategy, 將 update-strategy 策略調(diào)

    2024年02月15日
    瀏覽(24)
  • Mybatis-plus更新字段為null

    更新時(shí),把某些字段的值更新為null,但是目前mybatis-plus的update/updateById會忽略實(shí)體類中為null的字段,導(dǎo)致這些字段沒有更新還是原來的值。 網(wǎng)上比較常用的有兩種: 缺點(diǎn):當(dāng)在其它接口更新別的字段時(shí),本來沒有想更新這個(gè)字段,但是也會把這個(gè)字段更新為null。 缺點(diǎn):需

    2024年02月06日
    瀏覽(22)
  • Mybatis-plus怎么更新Null字段?

    本文介紹【Mybatis-plus】updateById()方法不能更新字段為null的原因及解決辦法。 在日常項(xiàng)目開發(fā)過程中,經(jīng)常會使用Mybatis-plus的updateById()方法,快速將接收道德參數(shù)或者查詢結(jié)果中原本不為null的字段更新為null,并且該字段在數(shù)據(jù)庫中可為null,這個(gè)時(shí)候使用updateById()并不能實(shí)現(xiàn)

    2024年02月13日
    瀏覽(37)
  • 跨應(yīng)用連接同一個(gè)redis,從redis取緩存,對象屬性值都為null

    跨應(yīng)用連接同一個(gè)redis,從redis取緩存,對象屬性值都為null

    ? 原因:idea本地代碼實(shí)體類未進(jìn)行代碼混淆,docker代碼實(shí)體類進(jìn)行了混淆,導(dǎo)致對象存在,但是對象屬性值為nul debug反序列化源碼如下 讀取到的字段為A,實(shí)體類中為具體的屬性,不存在A,找到問題所在 ?當(dāng)時(shí)排查了如下幾個(gè)方面 實(shí)體類是否進(jìn)行序列化,序列化id是否指定

    2024年02月13日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包