您的位置:首页 > 编程语言 > Java开发

java web 接收发送json格式的数据

2013-05-27 10:30 453 查看
        说明:本人最近做了一个项目,其中遇到了一些问题,就这些问题的解决方法与大家分享。

        概要:java web 接收json格式的数据 ,发送json格式的数据。

         好了,废话不多说,直接进入主题,web中我们经常使用的请求方式有两种POST 、GET。我们都知道这两种方式提交的数据协议,通常说的信息头Content-Typ。不知道大家注意过没有,我们提交的信息头为application/x-www-form-urlencoded格式。但是我的项目中传来的数据格式是application/json格式。这让我有点措手不及。我们都习惯了以键值对的方式接受参数、值,这次突然无参数名,就一个json数据。用惯了stuts,ActionForm 始终无法获取值。没办法我只能去研究学习request底层知识,学完之后得到一些小的心得,这里与大家分享一下,如有理解错的地方请大神指正。

        request请求发给服务器端的是数据流。但是咱们在服务器端却能以参数名来获取参数值,也就是说服务器端收的是键值对形式的数据。这是怎么回事儿呢?我觉得原因出在信息头也就是Content-Typ类型身上。我们用application/x-www-form-urlencoded格式发送请求会以键值对的形似被封装。至于是在浏览器发送的时候被封装的还是在服务器端被封装的我还不太清楚。但是我的猜测是在浏览器发送请求的时候在客户端被封装的。对于信息头不是application/x-www-form-urlencoded格式的请求会被浏览器直接以不处理的数据流发送到服务器端,这也就是为什么我用ActionForm始终拿不到值得原因。那么要怎么处理以application/json格式发送的数据呢?

        要处理以application/json格式发送的数据非常简单,我之前说过的,浏览器会把所有非application/x-www-form-urlencoded格式的请求以不处理的数据流发送到服务器端

。那么我们只需要在服务器端接收这个数据流并做相应处理即可例如:我们先接收这个输入流 request.getInputStream();然后再对这个输入流进行处理,把其以字符串的形式获取。具体的获取方法我就不在这儿赘述了(因为太简单了),如果真的想知道怎么去实现的可以去的资源库中下载,有我打成createsun-HttpServletRequestJson-1.0.jar包(此jar包为免费资源),为了支持开源我把源码createsun-HttpServletRequestJsonSource-1.0.jar也放到我的资源库中供大家下载(下载豆1)。懒得实现的话,就动手下载我的jar包或源代码。

        以application/json格式把数据发送到客户端是非常简单的,不哆嗦直接上代码:

             response.setContentType("application/json;charset=UTF-8");

             response.setCharacterEncoding("UTF-8");

             response.setHeader("Cache-Control", "no-cache");   

             PrintWriter returnValue=response.getWriter();

             打完收工。

        我们只需要把一个字符串写成json格式即可例如:String json = "{\"status\" : true , \"info\" : \"我是json格式数据\"}" ;

             returnValue.write(json);

             returnValue.close();

             好了完成。

        如果你实在懒到家了,也可以去json网站下载java json转换数据包。其用法:

            JSONObject jsonString = new JSONObject("{status : true , info : 我是json格式数据.}");

            returnValue.write(jsonString.toString());

             returnValue.close();

        好,完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐