Servlet处理JSON字符串传输问题

前些时候做学校的实践周项目,因为功能比较简单,没有采用框架直接用Servlet实现。过程中遇到了一些问题,其中就出现了Json字符串传输问题。

1、request.getParameter()方法问题

刚开始前端通过get请求传输数据,后端采用request.getParameter()方法接收数据。但后来有了局部刷新需求,前端改用Ajax发送json请求后,request.getParameter()接收不到数据。然后同学告诉我是因为json数据是通过request body(请求体)传送的,而request.getParameter()只能获取request head(请求头)中的数据,所以原来的方法无效。

2、Java解析json问题

2.1 实现方法

放弃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();    
}

2.2 遇到的问题

导入包的版本不对。这是一个教导人使用Maven的很好的例子,如果使用Maven就不会有这些问题了。错误的包可能不含有相关方法,在程序运行的时候会报空错误。当时是换了好几个不同版本的包才把报错解决掉,所以最好还是使用Maven进行管理。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券