如何從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;
}
}總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Eclipse中Properties和yml配置文件注釋亂碼的解決
這篇文章主要介紹了Eclipse中Properties和yml配置文件注釋亂碼的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10
java中四種生成和解析XML文檔的方法詳解(介紹+優(yōu)缺點比較+示例)
本篇文章主要介紹了四種生成和解析XML文檔的方法,即:DOM、SAX、JDOM和DOM4J,具有一定的參考價值,有興趣的可以了解一下。2016-11-11
Java生成10個1000以內的隨機數并用消息框顯示數組內容然后求和輸出
這篇文章主要介紹了Java生成10個1000以內的隨機數并用消息框顯示數組內容然后求和輸出,需要的朋友可以參考下2015-10-10

