在使用Java開發(fā)RESTful API接口的時(shí)候,很多時(shí)候需要從請(qǐng)求的json數(shù)據(jù)中獲取一些參數(shù)。這時(shí)候我們可以使用dofilter來(lái)解決這個(gè)問(wèn)題。dofilter是Java中的一種過(guò)濾器,可以用來(lái)對(duì)請(qǐng)求進(jìn)行處理,包括讀取請(qǐng)求的json數(shù)據(jù)。
public class RequestFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//初始化操作
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
String json = getJsonString(request);
//從json中獲取需要的參數(shù)
String param1 = JSON.parseObject(json).getString("param1");
String param2 = JSON.parseObject(json).getString("param2");
//將參數(shù)放入request中,方便后續(xù)處理
request.setAttribute("param1", param1);
request.setAttribute("param2", param2);
//繼續(xù)處理請(qǐng)求
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
//銷毀操作
}
private String getJsonString(HttpServletRequest request) throws IOException {
BufferedReader reader = request.getReader();
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
return sb.toString();
}
}
上述代碼中,我們首先實(shí)現(xiàn)了dofilter方法,在該方法中我們從請(qǐng)求中獲取json數(shù)據(jù),然后使用JSON庫(kù)將json數(shù)據(jù)解析成對(duì)象。接下來(lái),我們就可以從解析出來(lái)的對(duì)象中獲取需要的參數(shù),將其保存到request中,然后繼續(xù)執(zhí)行filterChain.doFilter方法。
在具體的業(yè)務(wù)處理代碼中,我們就可以直接從request中獲取對(duì)應(yīng)的參數(shù),如下所示:
String param1 = request.getAttribute("param1");
String param2 = request.getAttribute("param2");
這樣就可以非常方便地從請(qǐng)求中獲取json參數(shù)了。