前些时候作学校的实践周项目,由于功能比较简单,没有采用框架直接用Servlet实现。过程当中遇到了一些问题,其中就出现了Json字符串传输问题。前端
刚开始前端经过get请求传输数据,后端采用request.getParameter()方法接收数据。但后来有了局部刷新需求,前端改用Ajax发送json请求后,request.getParameter()接收不到数据。而后同窗告诉我是由于json数据是经过request body(请求体)传送的,而request.getParameter()只能获取request head(请求头)中的数据,因此原来的方法无效。java
放弃request.getParameter()方法,采用流的方式读取request body中的json串。而后将json字符串转为JSONObject对象,最后将JSONPObject对象转为Java对象。json
这里须要导入json支持包,一共有6个包,必不可少。后端
实现方法以下:app
try { BufferedReader br = new BufferedReader(new InputStreamReader( (ServletInputStream)request.getInputStream(), "utf-8")); StringBuffer sb = new StringBuffer(""); String temp; while ((temp = br.readLine()) != null) { sb.append(temp); } br.close(); //获取到的json字符串 String acceptjson = sb.toString(); //将json字符串转为jsonobject对象 JSONObject json = JSONObject.fromObject(acceptjson); //将jsonobject对象转为java对象 Client client = (Client)JSONObject.toBean(json,Client.class); System.out.println(client); } catch (Exception e) { e.printStackTrace(); }
导入包的版本不对。这是一个教导人使用Maven的很好的例子,若是使用Maven就不会有这些问题了。错误的包可能不含有相关方法,在程序运行的时候会报空错误。当时是换了好几个不一样版本的包才把报错解决掉,因此最好仍是使用Maven进行管理。框架