最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

從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
}

因?yàn)槲翼?xiàng)目中沒有用到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)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

溆浦县| 沧州市| 大连市| 田阳县| 梅河口市| 虞城县| 云南省| 祁门县| 互助| 上林县| 崇义县| 衢州市| 襄樊市| 三原县| 徐闻县| 高阳县| 新巴尔虎右旗| 淮北市| 象山县| 黎川县| 新乡市| 琼中| 三都| 靖远县| 黄山市| 松溪县| 上杭县| 喀喇| 博野县| 长治市| 彰化市| 化隆| 揭东县| 连州市| 长葛市| 五河县| 图木舒克市| 肃宁县| 黄平县| 富锦市| 施甸县|