如何从HttpServletRequest中拿到前端以application/json形式传输的body中的json串
背景吐槽
这个问题是笔者在维护一个祖传老项目的时候遇到的问题,项目中接收数据的类都是最原生的servlet类,里面的方法都是doPost,doGet,总之是个头大的祖传老项目。。。。
问题
由于需要前端上传一些比较大的json数据串,这种情况下如果用GET方法,然后再servlet中的doGet()方法中使用request.getParameter("字段名")的话是拿不到数据的,
再者如果json串比较复杂而且比较大,使用get方式会直接报错400。所以只能使用POST请求方式了,那么这种情况下如何从HttpServletRequest中拿到body中的json串呢?
下面看解决方法和代码。
解决方法
这里用到的是缓冲字符流(因为我们的Json串都是文字字符之类的,所以使用字符流比使用字节流更好),示例代码如下:
@WebServlet(name = "testServlet", urlPatterns = "/api/testServlet") public class TestServlet extends HttpServlet { private Gson gson = new Gson(); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { //自定义从bodyt中获取json格式数据 StringBuffer sb = new StringBuffer(); String line = null; try { BufferedReader reader = request.getReader(); while ((line = reader.readLine()) != null) sb.append(line); } catch (Exception e) { /*report an error*/ } //将空格和换行符替换掉避免使用反序列化工具解析对象时失败 String jsonString = sb.toString().replaceAll("\\s","").replaceAll("\n",""); //下面就可以使用如GSON或FastJson之类的工具解析成自己的对象数据并做后续的业务逻辑处理了 ...... ........ 返回结果 PrintWriter out = response.getWriter(); out.write("success"); out.close(); }
相关推荐
newthon 2020-05-13
adonislu 2020-01-18
牧场SZShepherd 2020-01-04
qianqianxiao 2019-11-04
翟浩浩Android 2013-01-13
张树刚 2019-07-16
sjunothing 2013-06-29
sjunothing 2017-10-17
ghjcduhvfyjhbf 2013-02-27
Dolphinsz 2011-09-16
大树 2016-09-19
yinge00 2016-04-09
Anything 2015-09-07
somebodyoneday 2012-09-24
csuhanshuai 2012-02-22
Urchindong 2012-02-06
ztgreenleaves 2012-01-10
大树 2011-10-24