request中获取post的json对象数据content-type=“text/plain”

其实采用http://www.cnblogs.com/SimonHu1993/p/7295750.html中的方法一都能获取到,
就是通过获取request中的流数据,拿到json数据,理论上应该适用各种content-type的请求数据。
/**
	 *获取 request 中用POST方式"Content-type"是
	 * "text/plain"发送的 json数据 
	 * @author: Simon
	 * @date: 2017年8月6日 下午7:44:09
	 * @param request
	 * @return
	 * @throws IOException
	 */
	public static String getPostByTextPlain(HttpServletRequest request) throws IOException{

		BufferedReader reader = request.getReader();
        char[] buf = new char[512];
        int len = 0;
        StringBuffer contentBuffer = new StringBuffer();
        while ((len = reader.read(buf)) != -1) {
            contentBuffer.append(buf, 0, len);
        }
        String content= contentBuffer.toString();
        return content;
	}

  

//在controll中进行调用;
String content = HttpJsonUtils.getPostByTextPlain(request);
//根据json数据中对象的key值及其类型取出相应的参数值
JSONObject jsObject = JSONObject.fromObject(content);
			try {
				usermob = jsObject.getString("usermob");
				cpid = jsObject.getString("cpid");
				spid = jsObject.getString("spid");
				type = jsObject.getString("type");
				ordertime = jsObject.getString("ordertime");
				canceltime = jsObject.getString("canceltime");
				endtime = jsObject.getString("endtime");
				channelcode = jsObject.getString("channelcode");
				province = jsObject.getString("province");
				area = jsObject.getString("area");
				ordertype = jsObject.getString("ordertype");
				videoid = jsObject.getString("videoid");
			} catch (Exception e) {
				LOGGER.info("发生错误*****" + e.getMessage());
			}    

  

<think>好的,用户之前问过关于C#中异步POST上传数据的问题,现在又询问关于请求头Content-Type: application/json的内容。我需要先理解用户的需求。可能用户在使用之前的代码示例时,遇到了设置Content-Type的问题,或者想更深入了解这个请求头的作用。 用户可能是刚开始学习API调用,对于HTTP请求头不太熟悉。他们可能在尝试发送JSON数据时,不确定如何正确设置请求头,导致服务器返回错误。所以需要详细解释Content-Type的作用,特别是application/json的用法,以及如何在C#中正确设置它。 需要确认用户是否了解HTTP请求头的基本概念,但根据之前的提问,用户可能已经接触过HttpClient的使用。因此,我的回答应该既包括基础解释,也要结合C#的具体实现,比如使用StringContent时的设置方法。同时,要注意提醒常见的错误,比如忘记设置Content-Type或者拼写错误,这些可能导致服务器无法正确解析数据。 另外,用户可能遇到的问题是,即使代码看起来正确,但服务器仍然返回错误,这时候需要检查Content-Type是否正确设置。可能还需要提到其他相关的Content-Type类型,比如表单数据,以便用户区分不同场景的用法。最后,给出一个具体的代码示例,帮助用户将理论应用到实践中,确保他们能够正确实现JSON数据POST请求。</think>在 HTTP 请求中,`Content-Type: application/json` 是一个 **关键请求头**,它明确告知服务器请求体(Body)中的数据格式是 **JSON**(JavaScript Object Notation)。这是现代 API 交互中最常用的数据格式之一。 --- ### 📌 **核心作用** 1. **数据格式声明** 告诉服务器端:`"我发送的请求体是 JSON 结构,请按 JSON 规则解析"` 2. **避免解析歧义** 未指定或错误设置会导致服务器无法正确解析数据(如返回 `400 Bad Request`) --- ### 🧩 **C# 中的典型用法** 使用 `HttpClient` 发送 JSON 数据时,需通过 `StringContent` 显式指定该头: ```csharp // 创建 JSON 内容 var data = new { Name = "John", Age = 30 }; string json = JsonSerializer.Serialize(data); // 序列化为 JSON 字符串 // 关键设置 Content-Type var content = new StringContent( json, Encoding.UTF8, "application/json" // 👈 这里指定 Content-Type ); // 发送 POST 请求 var response = await httpClient.PostAsync(apiUrl, content); ``` --- ### 🔍 **常见问题与注意事项** | 问题现象 | 原因与解决方案 | |---------| | 服务器返回 `400` 错误 | 未设置或拼写错误(如 `appliction/json`) | | 中文乱码 | 未指定 `Encoding.UTF8` | | 数据解析格式不符 | 实际发送的数据格式与声明的 Content-Type 不一致 | --- ### 💡 **其他常见 Content-Type 对比** | Content-Type | 适用场景 | C# 实现示例 | |--|-------------------------|--------------------------------| | `application/x-www-form-urlencoded` | 传统表单提交 | `FormUrlEncodedContent` | | `multipart/form-data` | 文件上传 | `MultipartFormDataContent` | | `text/plain` | 纯文本数据 | `new StringContent("raw text")` | --- ### 🚀 **调试技巧** 1. 使用 [Fiddler](https://www.telerik.com/fiddler) 或 [Postman](https://www.postman.com/) 抓包验证实际请求头 2. 服务端可添加日志检查接收到的原始数据 3. 使用 `curl` 快速测试: ```bash curl -X POST -H "Content-Type: application/json" -d '{"name":"test"}' http://api.example.com ``` --- 正确设置 `Content-Type: application/json` 是保证 JSON 数据交互成功的 **第一步**,建议与序列化/反序列化库(如 `System.Text.Json`)配合使用。如果需要处理复杂嵌套对象,可进一步配置 JSON 序列化选项(如驼峰命名、忽略空值等)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值