欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何從request中獲取body的數(shù)據(jù)

 更新時間:2023年11月18日 15:53:00   作者:月未明  
這篇文章主要介紹了如何從request中獲取body的數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

從request中獲取body的數(shù)據(jù)

如果在controller里直接@RequestBody就可以獲取,這種方式很簡單,現(xiàn)在說下直接從request中獲取。

說下場景

我是在shiro的filter中獲取body中的數(shù)據(jù):

@Override
    public boolean onAccessDenied(ServletRequest servletRequest, ServletResponse response) throws Exception{
        log.info("into onAccessDenied");
        try {
            HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest;

            String str = httpServletRequest.getQueryString();
            BufferedReader bufferedReader = httpServletRequest.getReader();
            String bodyStr = IOUtils.read(bufferedReader);
            System.out.println("bodyStr = " + bodyStr );
            return true;
        }catch (ExpiredCredentialsException e){
            log.info("請求信息過期");
            WebUtils.toHttp(response).sendError(401,"請求信息過期,操作失敗");
        }catch (Exception e){
            log.info("請求參數(shù)不合法");
            e.printStackTrace();
            WebUtils.toHttp(response).sendError(401,e.getMessage());
        }

        return false;
    }

這里給出主要的相關(guān)代碼,IOUtils是dubbo的一個類

相關(guān)依賴如下:

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version>
        </dependency>

通過這種方式獲取的是一個json字符串,

bodyStr =  {
    "timestamp":1523966342156
}

因為我項目中沒有用到dubbo,如果為了一個body的解析引入這個感覺有些不太合適,而且啟動的時候也沒有正常啟動,所以我把這塊代碼抽取了出來:

package com.test.shiro.util;

import java.io.IOException;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;

/**
 * @author Created by pangkunkun on 2018/4/20.
 * 這段代碼來自dubbo
 *
 */
public class RequestBodyUtils {

    private static final int BUFFER_SIZE = 1024 * 8;

    /**
     * read string.
     *
     * @param reader Reader instance.
     * @return String.
     * @throws IOException
     */
    public static String read(Reader reader) throws IOException
    {
        StringWriter writer = new StringWriter();
        try
        {
            write(reader, writer);
            return writer.getBuffer().toString();
        }
        finally{ writer.close(); }
    }

    /**
     * write.
     *
     * @param reader Reader.
     * @param writer Writer.
     * @return count.
     * @throws IOException
     */
    public static long write(Reader reader, Writer writer) throws IOException
    {
        return write(reader, writer, BUFFER_SIZE);
    }

    /**
     * write.
     *
     * @param reader Reader.
     * @param writer Writer.
     * @param bufferSize buffer size.
     * @return count.
     * @throws IOException
     */
    public static long write(Reader reader, Writer writer, int bufferSize) throws IOException
    {
        int read;
        long total = 0;
        char[] buf = new char[BUFFER_SIZE];
        while( ( read = reader.read(buf) ) != -1 )
        {
            writer.write(buf, 0, read);
            total += read;
        }
        return total;
    }

}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中的JSONObject使用及錯誤處理詳解

    Java中的JSONObject使用及錯誤處理詳解

    這篇文章主要給大家介紹了關(guān)于Java中的JSONObject使用及錯誤處理的相關(guān)資料,文中講解了Java中的JSONObject創(chuàng)建、基本操作、高級特性和錯誤處理,通過示例代碼和方法說明,使讀者能夠理解和掌握JSONObject的使用技巧,需要的朋友可以參考下
    2024-12-12
  • java自定義封裝StringUtils常用工具類

    java自定義封裝StringUtils常用工具類

    這篇文章主要為大家詳細介紹了java自定義封裝StringUtils常用工具類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 使用ShardingJDBC進行數(shù)據(jù)分片以及讀寫分離

    使用ShardingJDBC進行數(shù)據(jù)分片以及讀寫分離

    ShardingJDBC是一個輕量級的Java框架,提供了數(shù)據(jù)分片、讀寫分離、分布式主鍵生成等數(shù)據(jù)訪問功能,本文將給大家介紹如何使用ShardingJDBC進行數(shù)據(jù)分片以及讀寫分離,需要的朋友可以參考下
    2024-01-01
  • Java之并行流(Parallel Stream)使用詳解

    Java之并行流(Parallel Stream)使用詳解

    Java并行流(ParallelStream)通過多線程并行處理集合數(shù)據(jù),利用Fork/Join框架加速計算,適用于大規(guī)模數(shù)據(jù)集和計算密集型任務(wù),并行流主要通過集合的parallelStream()方法或現(xiàn)有流的parallel()方法創(chuàng)建,適用于數(shù)據(jù)量大、計算復(fù)雜且無狀態(tài)操作的場景
    2025-03-03
  • SpringBoot詳細講解異步任務(wù)如何獲取HttpServletRequest

    SpringBoot詳細講解異步任務(wù)如何獲取HttpServletRequest

    在使用框架日常開發(fā)中需要在controller中進行一些異步操作減少請求時間,但是發(fā)現(xiàn)在使用@Anysc注解后會出現(xiàn)Request對象無法獲取的情況,本文就此情況給出完整的解決方案
    2022-04-04
  • Java設(shè)計模式之適配器模式的示例詳解

    Java設(shè)計模式之適配器模式的示例詳解

    適配器模式,即將某個類的接口轉(zhuǎn)換成客戶端期望的另一個接口的表示,主要目的是實現(xiàn)兼容性,讓原本因為接口不匹配,沒辦法一起工作的兩個類,可以協(xié)同工作。本文將通過示例詳細介紹適配器模式,需要的可以參考一下
    2022-08-08
  • Struts2學(xué)習(xí)筆記(5)-參數(shù)傳遞方法

    Struts2學(xué)習(xí)筆記(5)-參數(shù)傳遞方法

    本文主要介紹Struts2中參數(shù)傳遞方法,希望能給大家做一個參考。
    2016-06-06
  • Redis中String字符串和sdshdr結(jié)構(gòu)體超詳細講解

    Redis中String字符串和sdshdr結(jié)構(gòu)體超詳細講解

    這篇文章主要介紹了Redis中String字符串和sdshdr結(jié)構(gòu)體,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-04-04
  • SpringCloud中的Seata基本介紹與安裝教程

    SpringCloud中的Seata基本介紹與安裝教程

    Seata 是一款開源的分布式事務(wù)解決方案,致力于提供高性能和簡單易用的分布式事務(wù)服務(wù),這篇文章主要介紹了SpringCloud之Seata基本介紹與安裝,需要的朋友可以參考下
    2024-01-01
  • Java高級-反射&動態(tài)代理詳解

    Java高級-反射&動態(tài)代理詳解

    這篇文章主要介紹了Java高級-反射&動態(tài)代理詳解,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03

最新評論