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

如何從request中獲取body的數據

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

從request中獲取body的數據

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

說下場景

我是在shiro的filter中獲取body中的數據:

@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("請求參數不合法");
            e.printStackTrace();
            WebUtils.toHttp(response).sendError(401,e.getMessage());
        }

        return false;
    }

這里給出主要的相關代碼,IOUtils是dubbo的一個類

相關依賴如下:

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

}

總結

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

相關文章

最新評論

南涧| 宁津县| 德江县| 阳西县| 冕宁县| 阿合奇县| 平塘县| 新津县| 禹州市| 华阴市| 鄂尔多斯市| 河间市| 天祝| 老河口市| 建瓯市| 盐津县| 河津市| 兰溪市| 电白县| 云浮市| 旬邑县| 道孚县| 昌吉市| 上饶市| 三台县| 吉林省| 健康| 柳江县| 河南省| 罗江县| 黄平县| 闽清县| 太康县| 郁南县| 晋城| 维西| 久治县| 贞丰县| 保靖县| 宜春市| 黎平县|