前些时候做学校的实践周项目,因为功能比较简单,没有采用框架直接用Servlet实现。过程中遇到了一些问题,其中就出现了Json字符串传输问题。
刚开始前端通过get请求传输数据,后端采用request.getParameter()方法接收数据。但后来有了局部刷新需求,前端改用Ajax发送json请求后,request.getParameter()接收不到数据。然后同学告诉我是因为json数据是通过request body(请求体)传送的,而request.getParameter()只能获取request head(请求头)中的数据,所以原来的方法无效。
放弃request.getParameter()方法,采用流的方式读取request body中的json串。然后将json字符串转为JSONObject对象,最后将JSONPObject对象转为Java对象。
这里需要导入json支持包,一共有6个包,必不可少。
实现方法如下:
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进行管理。