精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

實戰(zhàn)揭秘!Spring Boot 3.4 多 @RequestBody 處理技巧,輕松應(yīng)對復(fù)雜入?yún)?/h1>

開發(fā) 前端
在實際開發(fā)中,你可以根據(jù)項目需求選擇合適的方案,從而更高效地處理復(fù)雜的 JSON 請求體解析。希望本指南能幫助你輕松應(yīng)對 Spring Boot 3.4 的多 @RequestBody 解析問題!?

在 Spring Boot 3.4 開發(fā)過程中,@RequestBody 注解是解析 HTTP 請求體 JSON 數(shù)據(jù)的常見方式,能夠自動將數(shù)據(jù)綁定到 Java 對象中。然而,當 API 需要同時接收多個對象時,直接使用多個 @RequestBody 會導(dǎo)致 HttpMessageNotReadableException 異常。究其原因,這是由于 HttpServletRequest 的輸入流只能被讀取一次,第二個 @RequestBody 無法再次獲取數(shù)據(jù)。

本文將深入剖析這一問題的本質(zhì),并提供兩種不同的解決方案:

  1. 使用 DTO 進行封裝(適用于前端可以調(diào)整數(shù)據(jù)格式的場景)。
  2. 自定義 HttpServletRequestWrapper(適用于無法修改前端請求結(jié)構(gòu)的情況)。

通過這些方法,你可以在 Spring Boot 3.4 項目中靈活應(yīng)對復(fù)雜的 JSON 請求體解析問題。

解決方案

方法 1:使用 DTO 進行封裝

我們可以創(chuàng)建一個 RequestDTO 類,將 User 和 Person 統(tǒng)一封裝。

package com.icoderoad.dto;

public class RequestDTO {
    private User user;
    private Person person;
    // getter 和 setter
}

然后修改 Controller 方法:

package com.icoderoad.controller;


import com.icoderoad.dto.RequestDTO;
import org.springframework.web.bind.annotation.*;


@RestController
@RequestMapping("/api")
public class MultiRequestBodyController {
    @PostMapping("/multi")
    public String handleMultiple(@RequestBody RequestDTO dto) {
        return "Received: " + dto.getUser().getName() + " and " + dto.getPerson().getName();
    }
}

這種方式雖然簡單,但要求前端調(diào)整 JSON 數(shù)據(jù)格式。

方法 2:自定義 HttpServletRequestWrapper 允許多次讀取請求體

如果前端無法調(diào)整請求格式,我們可以使用 HttpServletRequestWrapper 解決 InputStream只能讀取一次的問題。

自定義 CachedBodyHttpServletRequest

package com.icoderoad.wrapper;


import jakarta.servlet.ReadListener;
import jakarta.servlet.ServletInputStream;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequestWrapper;
import org.springframework.util.StreamUtils;


import java.io.*;


public class CachedBodyHttpServletRequest extends HttpServletRequestWrapper {
    private final byte[] cachedBody;


    public CachedBodyHttpServletRequest(HttpServletRequest request) throws IOException {
        super(request);
        InputStream requestInputStream = request.getInputStream();
        this.cachedBody = StreamUtils.copyToByteArray(requestInputStream);
    }


    @Override
    public ServletInputStream getInputStream() {
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(cachedBody);
        return new ServletInputStream() {
            @Override
            public boolean isFinished() {
                return false;
            }
            @Override
            public boolean isReady() {
                return false;
            }
            @Override
            public void setReadListener(ReadListener listener) {}
            @Override
            public int read() {
                return byteArrayInputStream.read();
            }
        };
    }
}

創(chuàng)建過濾器攔截請求

package com.icoderoad.filter;


import com.icoderoad.wrapper.CachedBodyHttpServletRequest;
import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Component;


import java.io.IOException;


@Component
public class CachedBodyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        if (request instanceof HttpServletRequest) {
            CachedBodyHttpServletRequest wrappedRequest = new CachedBodyHttpServletRequest((HttpServletRequest) request);
            chain.doFilter(wrappedRequest, response);
        } else {
            chain.doFilter(request, response);
        }
    }
}

配置過濾器

package com.icoderoad.config;


import com.icoderoad.filter.CachedBodyFilter;
import jakarta.servlet.Filter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


import java.util.List;


@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean<Filter> cachedBodyFilter() {
        FilterRegistrationBean<Filter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new CachedBodyFilter());
        registrationBean.setUrlPatterns(List.of("/*"));
        return registrationBean;
    }
}

結(jié)論

在 Spring Boot 3.4 版本中,同時解析多個 @RequestBody 參數(shù)是一項常見但容易踩坑的挑戰(zhàn)。本文提供了兩種解決方案:

  • DTO 封裝方式適用于可以修改前端請求格式的場景,簡單易用,但需要前端配合調(diào)整 JSON 結(jié)構(gòu)。
  • HttpServletRequestWrapper 方案適用于無法修改前端數(shù)據(jù)格式的情況,能夠確保多個 @RequestBody 參數(shù)的正常解析。

在實際開發(fā)中,你可以根據(jù)項目需求選擇合適的方案,從而更高效地處理復(fù)雜的 JSON 請求體解析。希望本指南能幫助你輕松應(yīng)對 Spring Boot 3.4 的多 @RequestBody 解析問題!

責(zé)任編輯:武曉燕 來源: 路條編程
相關(guān)推薦

2025-04-27 04:00:00

錯誤頁Spring底層

2025-03-31 01:22:00

2020-04-23 15:59:04

SpringKafka集群

2023-10-23 09:44:00

并發(fā)管理線程

2025-05-12 08:00:00

Expect腳本自動化運維

2025-03-27 08:10:19

Spring開發(fā)架構(gòu)

2024-07-03 08:49:32

2025-02-17 00:00:45

接口支付寶沙箱

2024-01-31 08:50:41

Guava并發(fā)工具

2023-04-11 16:04:19

Spring Boo端點運維

2024-02-01 18:06:04

Python編程系統(tǒng)

2025-01-07 08:21:03

2024-12-03 10:46:48

Spring優(yōu)化開發(fā)

2023-09-24 13:55:42

Spring應(yīng)用程序

2025-01-13 12:46:31

SpringBootJacksonJSON

2025-02-21 16:00:00

SpringBoot代碼開發(fā)

2025-04-03 07:56:08

電子簽名合同系統(tǒng)Spring

2025-01-15 12:43:23

2025-05-13 07:13:25

2024-08-09 08:52:26

點贊
收藏

51CTO技術(shù)棧公眾號

国产午夜精品麻豆| 天天综合天天做天天综合| 国产精品日韩av| 午夜剧场免费在线观看| 日韩精品久久久久久久软件91| 亚洲一区二区四区蜜桃| 欧美一区观看| www日本高清视频| 久久国产高清| 欧美成人精品一区二区| 精品人妻一区二区三区视频| 日韩专区视频| 一本大道综合伊人精品热热| 天天做天天爱天天高潮| 少妇性bbb搡bbb爽爽爽欧美| 国模少妇一区二区三区| 5252色成人免费视频| 美国黄色片视频| 亚洲桃色综合影院| 日韩欧美你懂的| 黑人粗进入欧美aaaaa| 国产精品一区hongkong| 最新国产の精品合集bt伙计| 免费影院在线观看一区| 午夜精品一区二区三| 奇米精品一区二区三区在线观看 | 亚洲综合在线中文字幕| 在线观看日本网站| 亚洲久色影视| 美女视频久久黄| 中文字幕免费在线看线人动作大片| 99国产精品久久一区二区三区| 欧美日韩亚洲综合在线| 动漫av免费观看| 岛国av在线播放| 亚洲午夜免费电影| 国产成人生活片| 黄网页免费在线观看| 欧美国产日韩精品免费观看| 久中文字幕一区| 日本美女一级视频| 丁香婷婷综合激情五月色| 91网站免费观看| 伊人22222| 青青草91视频| 国产精品视频自拍| av手机天堂网| 三级不卡在线观看| 欧美中文在线观看| 国产精品男女视频| 免费日韩av| 欧美在线亚洲一区| 国产美女www| 蜜桃av一区二区在线观看| 国产精品午夜国产小视频| 波多野结衣视频免费观看| 日韩av一区二区三区四区| 国产精品露脸av在线| a片在线免费观看| 美女一区二区视频| 91精品在线看| 国产黄色大片网站| 国产成人av电影在线观看| 国产高清精品一区| 天堂av资源在线| 久久久综合网站| 亚洲精品无人区| 成年人网站在线| 亚洲一区二区成人在线观看| 性高湖久久久久久久久aaaaa| www.超碰在线| 色综合久久天天综合网| 亚洲综合欧美激情| 精品视频在线一区| 亚洲精品在线观看视频| 久久亚洲AV成人无码国产野外| 免费毛片在线不卡| 最近的2019中文字幕免费一页| 国产老头老太做爰视频| 国产精品九九| 国产成人精品久久二区二区91| 人人妻人人爽人人澡人人精品| 精品在线播放免费| 国产精品有限公司| 国产一区电影| 一区二区三区欧美| 国产l精品国产亚洲区久久| 日韩av电影资源网| 欧美mv日韩mv国产网站app| 免费看黄色aaaaaa 片| 欧美综合一区| 久久久久久国产三级电影| 天天干天天干天天操| 久久66热偷产精品| 国内一区在线| 国产一二三区在线观看| 欧美日韩激情小视频| 五月天视频在线观看| 免费观看成人www动漫视频| 亚洲图片欧洲图片av| 久久中文免费视频| 久久综合九色综合欧美狠狠| 亚洲自拍小视频免费观看| 欧美日韩在线中文字幕| 一区二区三区国产精品| 亚洲黄色a v| 老司机aⅴ在线精品导航| 深夜福利一区二区| www.国产一区二区| 高清成人在线观看| 亚洲国产欧美日韩| 丁香六月综合| 精品国产一区二区三区忘忧草| 国产精品久久免费观看| 在线观看不卡| 99久久伊人精品影院| sese一区| 色综合久久久久综合体桃花网| 自拍视频第一页| 国产精品99久久久久久动医院| 欧美亚洲一级片| 肥臀熟女一区二区三区| 亚洲天堂精品在线观看| 亚洲一区二区蜜桃| 国产99久久久国产精品成人免费 | 永久免费看av| 色狠狠一区二区三区| 亚洲欧美综合图区| 欧美一二三区视频| 成人性视频免费网站| 亚洲天堂第一区| 中文字幕日韩亚洲| 色多多国产成人永久免费网站 | 亚洲美女激情视频| 国产无码精品视频| 懂色av一区二区夜夜嗨| 小泽玛利亚av在线| 成人国产精品久久| 久久久精品免费视频| 亚洲无码精品在线播放| 国产精品久久久久久久裸模| 国产免费又粗又猛又爽| 黑丝美女一区二区| 国产精品国产三级国产aⅴ浪潮| 欧美女v视频| 欧美性xxxxxxxxx| 四虎影成人精品a片| 美女被到爽高潮视频| 精品一区二区三区视频在线播放| 中文字幕日韩综合av| 这里只有久久精品视频| 欧美经典一区二区| 日本高清久久久| 亚洲精品久久久| 不卡一卡2卡3卡4卡精品在| 色女人在线视频| 欧美精品一区二区三区蜜臀| 日韩欧美亚洲视频| 久久这里只有精品首页| 999在线免费视频| 99精品美女| 91久久爱成人| 黄色18在线观看| 国产午夜精品麻豆| 中文字幕一区二区三区四区免费看| 国产精品网站在线播放| 涩涩网站在线看| 一区免费在线| 秋霞毛片久久久久久久久| 欧美成人福利| 欧美疯狂性受xxxxx另类| 日本免费一区视频| 色婷婷av一区二区三区大白胸| 黄色免费一级视频| 粉嫩欧美一区二区三区高清影视| 日本a在线免费观看| 国产探花一区在线观看| 91久久久久久久久久久久久| segui88久久综合9999| 一区二区三区久久精品| 国产肥老妇视频| 欧美性生交大片免费| 国产在线免费看| 99久久精品国产网站| 色播五月综合网| 91久久中文| 一区不卡字幕| 久久亚洲黄色| 成人黄色免费网站在线观看| 伊人精品影院| 国产一区二区三区在线观看视频| 97人妻精品一区二区三区视频| 亚洲成av人综合在线观看| 娇妻被老王脔到高潮失禁视频| 国产福利91精品一区| 欧美综合在线观看视频| 韩日精品视频| 一本一生久久a久久精品综合蜜| 欧美三级午夜理伦三级小说| 成人在线视频福利| 卡通欧美亚洲| 欧美激情亚洲激情| 秋霞影院午夜丰满少妇在线视频| 日韩成人av一区| 国产高中女学生第一次| 欧美日韩在线电影| 久久精品视频5| 亚洲永久免费视频| 亚洲色图27p| 久久久久88色偷偷免费| 国产免费一区二区三区最新6| 免费高清在线一区| 欧美综合在线观看视频| 亚洲欧洲日本mm| 三上悠亚免费在线观看| 欧美成人自拍| 欧美一区二区视频17c| www.丝袜精品| 亚洲精品免费一区二区三区| 日韩一区精品| 国产精品黄视频| 亚洲人成午夜免电影费观看| 久久久久久久电影一区| 91精选在线| 久久久国产精品x99av| av资源种子在线观看| 亚洲欧美日韩一区二区在线| 亚洲黄色精品视频| 欧美一区二区三区不卡视频| 欧美午夜无遮挡| 日韩毛片在线播放| 亚洲成人午夜影院| 久久精品国产av一区二区三区| 亚洲美女视频一区| 老熟妻内射精品一区| 国产精品免费久久久久| 欧美激情久久久久久久| 欧美精彩视频一区二区三区| 中文字幕免费视频| 久久久精品国产99久久精品芒果 | 日本一区二区三区四区在线视频 | 亚洲av无码国产精品永久一区 | 国产精品盗摄久久久| 韩国美女久久| 国产成人精品免高潮费视频| 秋霞国产精品| 国产精品稀缺呦系列在线| 欧美男男gaygay1069| 国产精品综合网站| 免费一级欧美在线观看视频| 成人美女免费网站视频| 精品视频成人| 黑人中文字幕一区二区三区| 奇米影视777在线欧美电影观看| 精品视频在线观看| 国产欧美日韩免费观看| 这里只有精品66| 午夜国产精品视频| 日本a视频在线观看| 欧美亚洲网站| 在线观看av网页| 国产一区二区女| 国产日韩视频一区| 久久精品亚洲国产奇米99| 永久免费观看片现看| 亚洲人吸女人奶水| 国产成人愉拍精品久久| 欧洲另类一二三四区| 国产精品久久久久久久久毛片| 日韩一区二区三区视频在线观看| 黑人乱码一区二区三区av| 日韩精品在线第一页| 最新电影电视剧在线观看免费观看| 久久精品欧美视频| 成人黄色动漫| 国产色视频一区| 国产精品巨作av| 日产精品一线二线三线芒果| 亚洲乱码电影| 国产美女无遮挡网站| 六月丁香婷婷久久| 中文字幕 日本| 最近日韩中文字幕| 国产尤物在线视频| 欧美一区二区成人6969| 男人av在线| 欧美大成色www永久网站婷| 蜜桃av在线| 91精品免费视频| 色爱av综合网| 精品91一区二区三区| 母乳一区在线观看| 欧美体内she精高潮| 国产欧美一区二区精品仙草咪| 亚洲欧美中文在线视频| 精品欧美在线观看| 国产亚洲精品久久久久久777| free性欧美hd另类精品| 国产成人高清激情视频在线观看| 亚洲精品高潮| 亚洲美女搞黄| 午夜亚洲激情| 亚洲av熟女高潮一区二区| 国产精品萝li| 欧美h在线观看| 欧美videos大乳护士334| 1024免费在线视频| 日本精品一区二区三区在线播放视频| 色悠久久久久综合先锋影音下载| 日本一区二区三区视频在线播放| 欧美激情成人在线| 超碰超碰在线观看| 国产欧美日韩三区| 羞羞影院体验区| 精品久久久影院| av在线免费播放| 国产精品一区二区三| 久久av资源| 人妻有码中文字幕| jizz一区二区| 久草国产在线视频| 日韩欧美中文字幕公布| 国产精品实拍| 成人两性免费视频| 欧洲激情视频| 久久久久久三级| 日本一区二区三区在线观看| 精品国产午夜福利| 日韩精品视频在线观看网址| 美足av综合网| 国产伦精品一区二区三区四区视频| 一区二区三区午夜视频| 天天久久综合网| 亚洲视频在线一区| 91亚洲精品国偷拍自产在线观看 | 成人黄色网址| 亚洲一区二区自拍| 欧美一区久久| 绯色av蜜臀vs少妇| 亚洲最大色网站| 黑人乱码一区二区三区av| 欧美极品第一页| aiss精品大尺度系列| 69sex久久精品国产麻豆| 不卡高清视频专区| 国产免费观看av| 亚洲人成在线播放| 中文另类视频| 在线一区亚洲| 国产精品99久久久久久宅男| 日本精品人妻无码77777| 日韩一区二区三区三四区视频在线观看 | 永久免费网站视频在线观看| 国产精品99久久久久久宅男| 国产成人精品av久久| 亚洲精品一区久久久久久| 亚洲一区站长工具| 人禽交欧美网站免费| 九九国产精品视频| 欧美极品视频在线观看| 亚洲国产精品高清久久久| 欧美在线极品| 亚洲精品在线免费看| 国产在线看一区| 国产一级aa大片毛片| 亚洲欧美成人精品| 欧美aaa级| aa视频在线播放| 中文字幕乱码日本亚洲一区二区| 91欧美日韩麻豆精品| 欧美激情一级精品国产| 色综合久久中文| 一级黄色录像在线观看| 一区二区三区欧美激情| 三级在线电影| 成人国产精品日本在线| 亚洲黄色在线| 91制片厂在线| 亚洲变态欧美另类捆绑| 国产亚洲精品精品国产亚洲综合| 米仓穗香在线观看| 久久精品一区蜜桃臀影院| 国产精品美女一区| 欧美一区二区三区四区在线| 91综合在线| 成熟妇人a片免费看网站| 欧美中文字幕一二三区视频| 色婷婷在线播放| 神马影院我不卡午夜| yourporn久久国产精品| 中文字幕在线观看你懂的| 久久久免费在线观看| 成人羞羞视频播放网站| 精品熟女一区二区三区| 欧美日韩你懂的| 欧美aa在线| 成人高清dvd| 欧美国产一区在线| 天堂av2024| 成人自拍爱视频|