从HTTP request的body中拿到JSON并反序列化为一个对象

import com.google.gson.Gson;
import org.apache.struts2.ServletActionContext;

import javax.servlet.ServletRequest;
import java.io.*;

/**
 * Created by sky.tian on 2015/1/12.
 */
public class Test {

    private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;

    private static final Gson gson = new Gson();

    public <T> T parseRequestBody(Class<T> type) throws IOException {
        ServletRequest request = ServletActionContext.getRequest();
        InputStream inputStream = request.getInputStream();
        String json = getRequestBodyJson(inputStream);
        return gson.fromJson(json, type);
    }

    /**
     * 得到HTTP请求body中的JSON字符串
     * @param inputStream
     * @return
     * @throws IOException
     */
    private String getRequestBodyJson(InputStream inputStream) throws IOException {
        Reader input = new InputStreamReader(inputStream);
        Writer output = new StringWriter();
        char[] buffer = new char[DEFAULT_BUFFER_SIZE];
        int n = 0;
        while(-1 != (n = input.read(buffer))) {
            output.write(buffer, 0, n);
        }
       return output.toString();
    }

}

用户向一个Struts2 Action发送一个HTTP请求,比如URL是/user/create,方法是POST,用户的数据放在HTTP的RequestBody之中。

如何把HTTP body中的内容拿出来还原成Action所需的对象呢?以上代码就可以了。使用了GSON库。

时间: 2024-08-05 07:04:03

从HTTP request的body中拿到JSON并反序列化为一个对象的相关文章

Asp.Net中使用Newtonsoft.Json转换,读取,写入

using Newtonsoft.Json; using Newtonsoft.Json.Converters; //把Json字符串反序列化为对象 目标对象 = JsonConvert.DeserializeObject(JSON字符串, typeof(目标对象)); //把目标对象序列化为Json字符串 string Json字符串 = JsonConvert.SerializeObject(目标对象); 1.引用Newtonsoft.Json.dll 2.在项目中添加引用.. 序列化和反序

spring mvc DispatcherServlet详解之三---request通过ModelAndView中获取View实例的过程

整个spring mvc的架构如下图所示: 上篇文件讲解了DispatcherServlet第二步:通过request从Controller获取ModelAndView.现在来讲解第三步:request 从ModelAndView中获取view对象. 获取view对象一般是通过viewResolver来解析view name来完成的.若ModelAndView中view 不存在或者ModelAndView本身为null则填充默认值.代码如下: ModelAndView中view 不存在或者Mod

EL表达式从request和session中取值

在Action中保存登录的基本信息:request.getSession().setAttribute("adminid", str); 在JSP页面中:${sessionScope.adminid} java:request.setAttribute("adminid",str); 在JSP页面中:${#request.adminid} Struts2中 :<s:hidden name="adminid" value="#ses

SpringMVC中controller接收Json数据

SpringMVC中controller接收Json数据 1.jsp页面发送ajax的post请求: function postJson(){ var json = {"username" : "imp", "password" : "123456"}; $.ajax({ type : "post", url : "<%=basePath %>ajaxRequest", co

通过Jquery中Ajax获取json文件数据

1. JSON(JavaScript Object Notation): javaScript对象表示法: 是存储和交换文本信息的语法,比xml更小,更快,更易解析. 2. JSON基本书写格式 : 名称/值对. 例如: "Student":"Tom" Json值可以是: 数字(整数或浮点数) 字符串(在双引号中) 逻辑值(true或者false) 数组(在方括号中) 对象(在花括号中) null  例如(对象):{"name":"to

ASP.NET中XML转JSON的方法

原文:ASP.NET中XML转JSON的方法 许多应用程序都将数据存储为XML的格式,而且会将数据以JSON的格式发送到客户端以做进一步处理.要实现这一点,它们必须将XML格式转换为JSON格式. XML转JSON代码 [csharp] view plaincopy private static string XmlToJSON(XmlDocument xmlDoc) { StringBuilder sbJSON = new StringBuilder(); sbJSON.Append("{ &

Android中序列化对象到XMl 和 XML反序列化为对象

package com.example.xmloperation; import java.io.File; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; import java.util.Random; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; imp

解决在IE8中无法使用原生JSON的问题

转自:http://www.iitshare.com/ie8-not-use-native-json.html 起因 在项目中要将页面上的js对象传给后台,想到可以用json转成字符串传递. 1 2 var obj = {"a":1 "b":2, "c":3}; var str = JSON.stringify(obj); 上述代码在firefox,chrome中测试都没问题,可是在ie8下确提示JSON Not Defined,google了一

[译] 在Web API 2 中实现带JSON的Patch请求

原文链接:The Patch Verb in Web API 2 with JSON 我想在.NET4.6 Web API 2 项目中使用Patch更新一个大对象中的某个字断,这才意识到我以前都没有用过Patch.这是一次难得的学习机会. 我不知道在Web API 2中最好的实现方式是什么,所以我按照惯例,用google搜索"Patch Web API".我得到的第一条结果是Michael McKenna's "How to Add JSON Patch Support to