当前位置: 首页 > news >正文

网站制作素材图片杭州seo排名收费

网站制作素材图片,杭州seo排名收费,天助网推广效果怎么样,真正免费建网站使用场景:在接口处理之前,我们需要拿到请求参数,对参数进行校验。注意,这里需要拿到的是原始的请求信息! 一般的获取方式 ServletInputStream inputStream request.getInputStream(); StringBuilder stringBuilder …

使用场景:在接口处理之前,我们需要拿到请求参数,对参数进行校验。注意,这里需要拿到的是原始的请求信息!

一般的获取方式

ServletInputStream inputStream = request.getInputStream();
StringBuilder stringBuilder = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, request.getCharacterEncoding()))) {String line;while ((line = reader.readLine()) != null) {stringBuilder.append(line);}
} catch (IOException e) {e.printStackTrace();
}
String requestBody = stringBuilder.toString();

获取requestBody的代码大同小异,可自行搜索。代码没有问题,但是无法获取到requestBody,就要考虑接口方法是否使用了@RequestBody。

在Spring MVC框架中,当你使用@RequestBody注解时,Spring会在将请求转发到控制器方法之前,从HTTP请求体中读取数据并将其反序列化为Java对象。这一处理过程是由HttpMessageConverter完成的,它负责将请求体中的JSON、XML或其他格式的数据转换为Java对象。

请求体只能被读取一次:HTTP请求体是一个输入流,它只能被读取一次。一旦HttpMessageConverter读取了请求体,输入流就被“消耗”掉了,无法再次被读取。因此,当切面尝试访问请求体时,它发现输入流已经为空或不可用。

解决方法:

import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;public class CachedBodyHttpServletRequestWrapper extends HttpServletRequestWrapper {private final byte[] cachedBody;public CachedBodyHttpServletRequestWrapper(HttpServletRequest request) throws IOException {super(request);ByteArrayOutputStream outputStream = new ByteArrayOutputStream();InputStream inputStream = request.getInputStream();byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, bytesRead);}cachedBody = outputStream.toByteArray();}@Overridepublic ServletInputStream getInputStream() throws IOException {final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(cachedBody);return new ServletInputStream() {@Overridepublic boolean isFinished() {return byteArrayInputStream.available() == 0;}@Overridepublic boolean isReady() {return true;}@Overridepublic void setReadListener(ReadListener readListener) {}@Overridepublic int read() throws IOException {return byteArrayInputStream.read();}};}public String getCachedBody() {return new String(cachedBody, StandardCharsets.UTF_8);}
}
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;public class CachedBodyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {if (request instanceof HttpServletRequest) {HttpServletRequest httpRequest = (HttpServletRequest) request;CachedBodyHttpServletRequestWrapper cachedBodyRequestWrapper = new CachedBodyHttpServletRequestWrapper(httpRequest);chain.doFilter(cachedBodyRequestWrapper, response);} else {chain.doFilter(request, response);}}@Overridepublic void destroy() {}
}
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FilterConfig {@Beanpublic FilterRegistrationBean<CachedBodyFilter> loggingFilter(){FilterRegistrationBean<CachedBodyFilter> registrationBean = new FilterRegistrationBean<>();registrationBean.setFilter(new CachedBodyFilter());registrationBean.addUrlPatterns("/*");return registrationBean;    }
}

然后在切面里利用CachedBodyHttpServletRequestWrapper 去获取requestBody就可以了。

http://www.dinnco.com/news/86040.html

相关文章:

  • 牟长青 做网站推广的四个基本要点大数据培训班需要多少钱
  • 网站制作需要什么软件有哪些广州seo关键字推广
  • 招聘网站报表怎么做网页首页设计图片
  • 微网站 下载seo具体是什么
  • 佛山移动网站建设公司2023年10月疫情还会严重吗
  • 广元市城乡规划建设监察大队网站长沙百度公司
  • 东莞网站推广外包seo人员是什么意思
  • wordpress云建站教程视频郑州做网站推广
  • 河南网站制作价格推广赚钱的平台
  • 网站开发项目步骤史上最强大的搜索神器
  • 手机企业网站怎么做如何用百度平台营销
  • 自己可以进行网站建设吗希爱力的作用与功效
  • 做网站需要ps吗百度网盘资源搜索引擎
  • 平面网站模版谷歌seo是指什么意思
  • 网站建设及推广图片深圳百度seo怎么做
  • 上海利恩建设集团有限公司网站关键词分类工具
  • 公司网站静态模板百度服务中心人工24小时电话
  • 个人备案的域名拿来做别的网站百度搜索引擎的功能
  • 做产品网站需要注意怎么优化关键词排名优化
  • 山西有哪些做网站的公司石家庄疫情最新情况
  • 营销管理网站制作百度关键词搜索趋势
  • 在闲鱼可以做网站吗网络营销五个特点
  • wordpress 页面 评论网站的seo方案
  • 买过域名之前就可以做网站了吗?百度极速版推广员怎么申请
  • 龙南建设局网站企业网站优化工具
  • 扬中网站建设新品怎么推广效果最好
  • 网站手机站怎么做设计公司网站设计
  • 无锡 学校网站建设百度客服系统
  • 网站建设模式有哪些内容付费内容网站
  • 长春美容网站建设武汉新一轮疫情