使用HttpServletRequest获取POST提交的JSON
说明
一般用于拦截器中,重写preHandle方法中
代码如下
拦截器中
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
JSONObject jsonObject = JSONObject.parseObject(MyUtils.getRequestPostStr(request));
System.out.println("拦截器->"+jsonObject.toJSONString());
}
工具类
package cn.myauthx.api.util;
import com.alibaba.fastjson.JSONObject;
import org.springframework.util.DigestUtils;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 常用工具类
*
* @author DaenMax
*/
public class MyUtils {
/**
* 获取Request中的JSON字符串
* @param request
* @return
* @throws IOException
*/
public static String getRequestPostStr(HttpServletRequest request) throws IOException {
byte[] buffer = getRequestPostBytes(request);
String charEncoding = request.getCharacterEncoding();
if (charEncoding == null) {
charEncoding = "UTF-8";
}
return new String(buffer, charEncoding);
}
private static byte[] getRequestPostBytes(HttpServletRequest request) throws IOException {
int contentLength = request.getContentLength();
if(contentLength<0){
return null;
}
byte[] buffer = new byte[contentLength];
for (int i = 0; i < contentLength;) {
int readlen = request.getInputStream().read(buffer, i,
contentLength - i);
if (readlen == -1) {
break;
}
i += readlen;
}
return buffer;
}
/**
* JSON对象转为网址传参格式(按key的首字母从小到大排序)
* @param jsonObject
* @return
*/
public static String json2pathValue(JSONObject jsonObject) {
Map map = jsonObject.toJavaObject(Map.class);
Set<String> set = map.keySet();
List<String> keyList = new ArrayList<>(set);
List<String> collect = keyList.stream().sorted().collect(Collectors.toList());
StringBuilder stringBuilder = new StringBuilder();
for (String s : collect) {
String value =map.get(s).toString();
stringBuilder.append(s).append("=").append(value).append("&");
}
stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("&"));
return stringBuilder.toString();
}
/**
* 计算sign签名
* @param jsonObject
* @param genKey
* @return
*/
public static String calculateSign(JSONObject jsonObject, String genKey) {
String pathvalue = json2pathValue(jsonObject);
System.out.println(pathvalue);
pathvalue = pathvalue + "&gen_key=" + genKey;
System.out.println(pathvalue);
String sign = DigestUtils.md5DigestAsHex(pathvalue.getBytes(StandardCharsets.UTF_8));
return sign;
}
}
使用HttpServletRequest获取POST提交的JSON的更多相关文章
- 使用@RequestBody注解获取Ajax提交的json数据
最近在学习有关springMVC的知识,今天学习如何使用@RequestBody注解来获取Ajax提交的json数据内容. Ajax部分代码如下: 1 $(function(){ 2 $(" ...
- Spring MVC 后端获取前端提交的json格式字符串并直接转换成control方法对应的参数对象
场景: 在web应用开发中,spring mvc凭借出现的性能和良好的可扩展性,导致使用日渐增多,成为事实标准,在日常的开发过程中,有一个很常见的场景:即前端通过ajax提交方式,提交参数为一个jso ...
- 如何获取前端提交来得json格式数据
composer.json { "require": { "guzzlehttp/guzzle": "~6.0" } } composer ...
- jersey post提交到 ContainerRequestFilter 而HttpServletRequest获取不到数据(转)
jersey post提交到 ContainerRequestFilter 而HttpServletRequest获取不到数据 问题:在serverfilter request获取不到post提交的 ...
- java post请求的表单提交和json提交简单小结
在java实现http请求时有分为多种参数的传递方式,以下给出通过form表单提交和json提交的参数传递方式: public String POST_FORM(String url, Map< ...
- WebAPI的AuthorizeAttribute扩展类中获取POST提交的数据
在WEBAPI中,AuthorizeAttribute类重写时,如何获取post数据是个难题,网上找资料也不好使,只能自己研究,通过研究发现,WEBAPI给了我们获取POST数据的可能,下面介绍一下: ...
- struts2 接口如何接收客户端提交的json数据
struts2 接口如何接收客户端提交的json数据 CreationTime--2018年6月20日15点54分 Author:Marydon 1.情景还原 使用struts2写的接口(服务端) ...
- struts2获取前台提交的参数
CreateTime--2017年8月25日16:30:11 Author:Marydon struts2对获取前台提交参数的封装 需要导入: import java.util.Enumerati ...
- dynamic获取类型可变的json对象
使用dynamic获取类型可变的json对象 Dictionary<string, object> dict = new Dictionary<string, object>( ...
- ajax 请求 对json传的处理 Jquery 使用Ajax获取后台返回的Json数据后,页面处理
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- idea社区版配置springboot项目问题分析及处理
前言 记录一次使用IDEA社区版配置SpringBoot项目的经历,包括遇到的问题及解决过程 IDEA版本:IntelliJ IDEA 2024.2.3 (Community Edition) 问题描 ...
- vim使用技巧记录
1.查找 '/' + 要找的字符串(正则表达式) + Enter # 查找偏移 'n': 查找下一个 'N': 查找上一个 大小写敏感性:字符串尾接\c不敏感,\C敏感 可以~/.vimrc在配置中配 ...
- 入门Dify平台:如何根据需求选择与创建最合适的应用
今天我们将继续深入讲解Dify,重点介绍如何创建应用.具体来说,我们将探讨如何根据不同的需求来决定选择什么类型的应用最为合适,帮助大家更好地理解在Dify平台上构建应用的最佳实践. 创建空白应用 首先 ...
- 前端打包发布以及小程序发布(IIS下部署前端站点)
作为后端程序员 一直没有摸索过前端项目的打包发布,因为项目需要 这次经历一个 前端项目以及小程序的打包发布,记录一下. 一.前端部署 部署过程种一直出现node-sass 问题 https:/ ...
- Ubuntu安装mosquitto并进行配置
要在Ubuntu上安装Mosquitto并进行配置,你可以按照以下步骤进行操作: 打开终端. 更新软件包列表,使用以下命令: sudo apt update 安装Mosquitto包,使用以下命令: ...
- 【Linux】5.3 Shell字符串
Shell 字符串 字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号.单双引号的区别跟PHP类似. 1. 单 ...
- FireDAC 下的批量 SQL 命令执行
一.{逐条插入} procedure TForm1.Button1Click(Sender: TObject); const strInsert = 'INSERT INTO MyTable(Name ...
- 2012R2双网卡路由的设定
目前T440服务器, os只能起步2012R2.intelWin联盟是实实在在的.在该os上,DB支持SQL2008. 你要安装SQL2005也可以.到网上查找攻略.那也是死去活来.还好.2008兼容 ...
- Nginx开机启动(Linux环境下)
1.环境 centos6 2.描述 设置Nginx开机启动,当服务器重启后,可自行启动nginx 3.方案一 3.1.创建nginx.service文件 vim /usr/lib/systemd/sy ...
- python获取日期(今日、昨日),及格式化日期的方法(datetime)
在写爬虫的过程中发现,很多网站的信息均以当天日期为链接组成部分,但是格式又不相同 有些是20210328,有些是2021-03-28,还有些2021/03/28 如果一次爬取来源不同网站的信息,需要对 ...