精品欧美一区二区三区在线观看 _久久久久国色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免费一区二区| 日本一级片免费| 精品视频久久久久久久| 99视频免费观看| 天天综合网入口| 久久五月天小说| 精品国产免费一区二区三区香蕉| 中文字幕亚洲在线| 自拍日韩亚洲一区在线| 国产天堂在线| 国产成人综合自拍| 国产精品第一第二| 国产在线观看免费视频今夜| 欧美日韩中文一区二区| 精品久久久久久亚洲综合网| 亚州精品一二三区| 国产高清中文字幕在线| 中文字幕在线不卡一区二区三区| 国产乱码精品一区二区三区卡| 中文字幕一区二区人妻| 亚洲黄色毛片| 另类天堂视频在线观看| 高清国产在线观看| 五月国产精品| 亚洲国产精品成人av| 亚洲精品视频三区| 日韩av中字| 亚洲v中文字幕| 色哺乳xxxxhd奶水米仓惠香| jzzjzzjzz亚洲成熟少妇| 99久久精品99国产精品 | 一区二区精品视频| 你懂得在线网址| av电影在线观看不卡| 亚洲自拍偷拍第一页| 91国偷自产中文字幕久久| 日韩精品视频网站| 国产成人在线一区二区| 精品欧美一区二区三区免费观看| 亚洲网站在线| 久久久久日韩精品久久久男男 | 污污网站在线免费观看| 粉嫩aⅴ一区二区三区四区五区| 国产欧美日韩专区发布| 中文字幕永久在线观看| 全国精品久久少妇| 国产精品久久久久av| 日韩xxx视频| 日韩福利电影在线| 国产精品扒开腿做爽爽爽的视频| 99re这里只有精品在线| 久久久久99| 日韩av大片在线| 中文字幕日韩免费| 日韩精品免费视频人成| 国产精品入口日韩视频大尺度| 国产又粗又猛又爽又| 天堂影院一区二区| 国产精品狼人色视频一区| 中文字幕av影视| 精品一区二区三区在线观看国产| 成人h猎奇视频网站| 国产又粗又猛视频| 国产一二三精品| 国产91免费视频| 欧美视频xxx| 26uuu久久天堂性欧美| 蜜桃精品久久久久久久免费影院| 久青草国产在线| 中文字幕电影一区| 自拍另类欧美| av资源在线看片| 欧美日韩亚洲一区二| 激情婷婷综合网| 亚洲美女色播| 亚洲精品一区二区三区影院| 色婷婷av777| 欧美aaaa视频| 欧美夫妻性视频| 久久久久久少妇| 麻豆精品在线看| 444亚洲人体| 欧洲精品久久一区二区| 久久精品欧美一区二区三区不卡 | 亚洲视频观看| 91成人精品网站| 伊人久久一区二区| 国产成人精品亚洲777人妖| 久久久综合香蕉尹人综合网| 888av在线| 亚洲成年人影院| 色七七在线观看| 一区二区三区视频免费视频观看网站| 亚洲精品网址在线观看| 成人无码精品1区2区3区免费看| 亚洲欧美亚洲| 国产精品成久久久久三级| 亚洲精品国产精品国| 久久久精品免费观看| 91国在线高清视频| 亚洲日本在线观看视频| 欧美成人官网二区| 一二三四在线观看视频| 99热这里只有精品8| 国产日韩欧美91| 四虎影院在线域名免费观看| 亚洲婷婷在线视频| 日本精品www| 日韩最新av| 中日韩美女免费视频网站在线观看| 欧美激情精品久久| 久久国内精品自在自线400部| 国产麻豆日韩| 91小视频xxxx网站在线| 欧美视频一区在线观看| 国产又爽又黄无码无遮挡在线观看| 久久精品亚洲欧美日韩精品中文字幕| 欧美最猛性xxxxx免费| 精品久久无码中文字幕| 国产精品久久看| 成人av一级片| 国产香蕉精品| 欧美疯狂做受xxxx高潮| 国产又大又黄又爽| 欧美国产一区视频在线观看| 97国产精东麻豆人妻电影| 91精品啪在线观看国产爱臀| 久久精品国产亚洲7777| 伊人免费在线观看| 国产欧美日韩在线| 日日碰狠狠丁香久燥| 露出调教综合另类| 欧美精品激情在线观看| www.av在线.com| 亚洲免费av高清| 国产一级免费大片| 91精品一区国产高清在线gif| 国产精品欧美日韩| 成人免费视频| 欧美色电影在线| 国产黄色录像片| 老司机精品视频导航| 亚洲视频在线二区| 欧美综合影院| 免费91麻豆精品国产自产在线观看| 国产精品嫩草影院精东| 亚洲欧美一区二区不卡| 国产xxxxhd| 国内精品福利| 精品日韩美女| 五月激情久久| www.国产精品一二区| 国产片高清在线观看| 亚洲中国最大av网站| 制服丝袜第一页在线观看| 国产精品免费看| 奇米精品在线| 欧美成人aaa| 欧美大片网站在线观看 | 丰满亚洲少妇av| 国产午夜大地久久| 欧美日韩国产一区二区三区不卡| 国产精品一区二区三| 免费黄色电影在线观看| 日韩久久久精品| 国产做受高潮漫动| 国产亚洲精品超碰| 手机免费av片| 亚洲精品社区| 色姑娘综合网| 久久精品九色| 欧美综合在线第二页| 色影视在线观看| 日韩欧美精品在线视频| 国产精品国产三级国产专区52| 欧美激情综合在线| www.色.com| 午夜亚洲影视| 老司机av福利| 亚洲福利天堂| 成人午夜小视频| 草草在线视频| 久久精品99国产精品酒店日本| 亚洲免费国产视频| 欧洲精品中文字幕| 日本老熟俱乐部h0930| 久久先锋影音av鲁色资源| 91 视频免费观看| 亚洲制服少妇| 男女爱爱视频网站| 欧美丝袜丝交足nylons172| 99国产超薄肉色丝袜交足的后果| 午夜日韩成人影院| 久久99精品视频一区97| 国产在线网站| 精品少妇一区二区三区在线播放| 日本三级一区二区三区| 亚洲国产精品影院| www.99re6| 久久免费电影网| 午夜视频在线观| 日韩av二区在线播放| 欧洲精品一区二区三区久久| 欧美xxav| 欧美精品一区二区三区在线四季 | 秋霞久久久久久一区二区| 亚洲**毛片| 91精品久久久久久久久青青| 在线观看福利电影| 久久久久久久久久久免费| 麻豆tv免费在线观看| 国产亚洲福利一区| 无码国产精品96久久久久| 4438亚洲最大| 一级二级三级视频| 色成年激情久久综合| 福利一区二区三区四区| 亚洲激情在线激情| 特黄一区二区三区| 国产亚洲精品资源在线26u| 国产xxxxxxxxx| 懂色av一区二区三区免费观看| 亚洲第一天堂久久| 蜜桃视频一区二区三区在线观看 | 九九精品在线观看视频| 国产精品美女久久久久av爽李琼 | 中文字幕一区二区三区在线不卡| 成人精品在线观看视频| 播五月开心婷婷综合| 天天躁日日躁狠狠躁av麻豆男男 | 欧美日韩免费一区二区三区视频 | 91精品在线观看入口| 中日精品一色哟哟| 欧美中文字幕久久| www.久久视频| 在线观看日韩国产| 日本视频免费观看| 色狠狠色噜噜噜综合网| 91porny在线| 图片区小说区区亚洲影院| 国产在线观看免费视频今夜| 亚洲国产日韩a在线播放性色| 久久久精品国产sm调教网站| 亚洲一区在线视频| 精品无码人妻一区二区三区品| 亚洲成a人在线观看| 国产在线综合网| 无码av免费一区二区三区试看| 久草手机在线观看| 91黄色激情网站| 中文字幕人妻精品一区| 欧美精品v国产精品v日韩精品| 国产又粗又长视频| 欧美刺激脚交jootjob| 人妻丰满熟妇av无码区hd| 亚洲激情小视频| 青青草视频在线免费观看| 一道本无吗dⅴd在线播放一区| 国产高清av在线| 久久久www成人免费精品张筱雨| a毛片在线观看| 性欧美暴力猛交69hd| 亚洲伦乱视频| 亚洲一区美女视频在线观看免费| 午夜免费欧美电影| 国内一区二区三区在线视频| 少妇高潮一区二区三区| 水蜜桃一区二区| 欧美黄色一级视频| 黄在线观看网站| 久久精品国产精品亚洲红杏| 美女日批在线观看| 久久视频一区二区| 精品国产大片大片大片| 亚洲一卡二卡三卡四卡无卡久久 | 国产在线观看一区| 超碰福利在线观看| 在线成人av影院| 日韩中文字幕免费观看| 亚洲欧美另类国产| 韩国av网站在线| 91精品国产乱码久久久久久蜜臀| 午夜av成人| 成人免费在线看片| 成人av二区| 久久亚洲国产成人精品无码区| 国产精品资源| 国产成人在线综合| 91亚洲国产成人精品一区二区三| 一本一本久久a久久| 亚洲福中文字幕伊人影院| 国产成人av免费| 精品国产一二三| 婷婷免费在线视频| 91精品国产91久久久久久最新 | 97se视频在线观看| 国产伦精品一区二区三区视频| 中文字幕一区二区三区5566| av不卡在线| 国产精品999.| 国产亚洲精品久| 亚洲黄色三级视频| 欧美一区二区女人| 97在线观看免费观看高清| 久久免费视频网站| 麻豆一二三区精品蜜桃| 色视频一区二区三区| 日韩香蕉视频| 女同性αv亚洲女同志| 一色桃子久久精品亚洲| 中文字幕手机在线视频| 亚洲精品一区在线观看| 在线免费av导航| 91色中文字幕| 久久精品国产www456c0m| 日本三区在线观看| 久久只精品国产| 国产视频91在线| 亚洲国产精久久久久久 | 欧美在线视频导航| 东京久久高清| 伊人久久在线观看| 极品少妇xxxx精品少妇偷拍| 国产91丝袜美女在线播放| 色屁屁一区二区| 视频午夜在线| 78m国产成人精品视频| 福利电影一区 | 久久午夜av| 中文字幕免费看| 欧美性猛交xxxxx水多| 亚洲人妻一区二区三区| 8x拔播拔播x8国产精品| 六月丁香久久丫| 日本免费黄视频| 北岛玲一区二区三区四区| 国产一级片久久| 亚洲第五色综合网| ririsao久久精品一区| 国产伦精品一区二区三区在线| 一区在线播放| 五十路六十路七十路熟婆| 婷婷综合五月天| 天天操天天操天天干| 91精品国产乱码久久久久久久久 | 日韩欧国产精品一区综合无码| 亚洲日本欧美在线| 韩国女主播成人在线| 欧美丰满熟妇bbbbbb| 欧美一区二区三区思思人| 污污的网站在线免费观看| 国产不卡一区二区在线观看| 红桃视频欧美| 欧美成人三级伦在线观看| 欧美午夜久久久| 国产福利小视频在线观看| 国产欧美在线播放| 欧美伊人久久| 日韩aaaaa| 欧美亚洲自拍偷拍| 黄a在线观看| 国产精品免费一区二区三区在线观看| 亚洲人成免费| 国产毛片欧美毛片久久久| 91精品国产综合久久久久久久| 中文字幕伦理免费在线视频| 国模精品一区二区三区| 日韩福利视频导航| 免费一级片在线观看| 亚洲精品一区久久久久久| 欧美97人人模人人爽人人喊视频| 国产av熟女一区二区三区 | 2019男人天堂| 日韩精品综合一本久道在线视频| 涩涩视频网站在线观看| 尤物国产精品| 91麻豆国产自产在线观看| 中文在线免费观看| 久久久久久亚洲| 精品成人影院| 韩国一区二区三区四区| 色综合中文字幕| 丝袜中文在线| 特级西西444www大精品视频| 成人国产亚洲欧美成人综合网| 波多野结衣在线观看一区| 欧美激情小视频| a天堂在线视频| 成人福利电影精品一区二区在线观看|