如何從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
}因?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)文章
nacos服務(wù)注冊服務(wù)發(fā)現(xiàn)依賴配置詳解
這篇文章主要為大家介紹了nacos服務(wù)注冊服務(wù)發(fā)現(xiàn)依賴配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
Java function函數(shù)式接口的使用方法與實(shí)例
這篇文章主要介紹了Java function函數(shù)式接口的使用方法與實(shí)例,函數(shù)式接口如一支未完成的詩篇,用Lambda表達(dá)式作韻腳,將代碼的機(jī)械美感與藝術(shù)的抽象融為一體,悄然重構(gòu)了開發(fā)者對代碼之美的認(rèn)知,需要的朋友可以參考下2025-02-02
關(guān)于SpringMVC對Restful風(fēng)格的支持詳解
Restful就是一個資源定位及資源操作的風(fēng)格,不是標(biāo)準(zhǔn)也不是協(xié)議,只是一種風(fēng)格,是對http協(xié)議的詮釋,下面這篇文章主要給大家介紹了關(guān)于SpringMVC對Restful風(fēng)格支持的相關(guān)資料,需要的朋友可以參考下2022-01-01
Eclipse中Properties和yml配置文件注釋亂碼的解決
這篇文章主要介紹了Eclipse中Properties和yml配置文件注釋亂碼的解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10
Java字符編碼原理(動力節(jié)點(diǎn)Java學(xué)院整理)
Java開發(fā)中,常常會遇到亂碼的問題,一旦遇到這種問題,常常比較煩惱,大家都不想承認(rèn)是自己的代碼問題,其實(shí)搞明白編碼的本質(zhì)過程就簡單多了,接下來小編給大家?guī)韏ava字符編碼原理,要求看看吧2017-04-04
java中四種生成和解析XML文檔的方法詳解(介紹+優(yōu)缺點(diǎn)比較+示例)
本篇文章主要介紹了四種生成和解析XML文檔的方法,即:DOM、SAX、JDOM和DOM4J,具有一定的參考價(jià)值,有興趣的可以了解一下。2016-11-11
Java生成10個1000以內(nèi)的隨機(jī)數(shù)并用消息框顯示數(shù)組內(nèi)容然后求和輸出
這篇文章主要介紹了Java生成10個1000以內(nèi)的隨機(jī)數(shù)并用消息框顯示數(shù)組內(nèi)容然后求和輸出,需要的朋友可以參考下2015-10-10

