application/json请求使用方法,参数传送收受笔记记录

2 篇文章 0 订阅
	$.ajax({
		url:'/dangjian/**/rest/**/addSql',
		type:"post",
		contentType : 'application/json; charset=utf-8',
		data:JSON.stringify(teamform),//复杂对象记得序列化,否则后台报错无法解析
		dataType:"json",
		async : false,
		success:function(data){
			if(data.successful){
				messager_show(true,"添加成功!")
				hideAlert(_this);
				$("#pzgl_table").datagrid('reload');
			}else{
				messager_show(false,"添加失败!")
			}
			
		}
	});
	@RequestMapping(value = "/addSql", method = RequestMethod.POST)
	@ResponseBody
	public WrappedResult addSql(@RequestBody Map<String, String> map){//使用@RequestBody注解接收参数
		WrappedResult w = null;
		try{
			
			this.sqlmgrBizc.addSql(map);
			
			w = WrappedResult.successWrapedResult("公共的可执行sql数据-新增-保存成功!");
		}catch(Exception e){
			log.error("公共的可执行sql数据-新增-保存失败!", e);
			w = WrappedResult.failedWrappedResult("公共的可执行sql数据-新增-保存失败!");
		}
		return w;
	}
如果请求是 `application/json` 类型,那么参数是在请求体中的,而不是在 URL 中的。因此,在拦截器中获取请求参数需要先从请求体中读取,然后进行解密和修改,最后再将解密后的参数放回到请求体中。 以下是一个获取 `application/json` 请求体中参数并进行解密和修改的示例代码: ```java public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 从请求体中获取加密参数 BufferedReader reader = request.getReader(); StringBuilder jsonBuilder = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { jsonBuilder.append(line); } String encryptedParam = jsonBuilder.toString(); // 解密参数 String decryptedParam = decrypt(encryptedParam); // 修改参数 JSONObject json = new JSONObject(decryptedParam); json.put("key", "value"); // 将解密后的参数放回到请求体中 String modifiedParam = json.toString(); request = new WrappedRequest(request, modifiedParam); return true; } ``` 在上述代码中,我们首先通过 `request.getReader()` 获取请求体的 `BufferedReader` 对象,然后将其读取为字符串。接着,对请求体中的加密参数进行解密得到解密后的参数 `decryptedParam`。然后,我们使用 `JSONObject` 对象将解密后的参数转换为 JSON 对象,进行参数的修改。最后,将修改后的 JSON 对象转换为字符串,并使用自定义的 `WrappedRequest` 对象将其放回到请求体中。 需要注意的是,上述代码中使用了自定义的 `WrappedRequest` 类,用于包装修改后的请求体。这是因为 `HttpServletRequest` 对象的请求体是只读的,不能直接修改。因此,我们需要自定义一个类来包装修改后的请求体,并提供相应的读方法。以下是 `WrappedRequest` 类的示例代码: ```java public class WrappedRequest extends HttpServletRequestWrapper { private final String body; public WrappedRequest(HttpServletRequest request, String body) { super(request); this.body = body; } @Override public BufferedReader getReader() throws IOException { return new BufferedReader(new StringReader(body)); } @Override public ServletInputStream getInputStream() throws IOException { final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes()); ServletInputStream servletInputStream = new ServletInputStream() { public int read() throws IOException { return byteArrayInputStream.read(); } }; return servletInputStream; } } ``` 在上述代码中,我们继承自 `HttpServletRequestWrapper` 类,重写了 `getReader()` 和 `getInputStream()` 方法,返回一个自定义的 `BufferedReader` 和 `ServletInputStream` 对象。这样,就可以将修改后的请求体放回到 `HttpServletRequest` 对象中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值