我的编程空间,编程开发者的网络收藏夹
学习永远不晚

java restful application/x-www-form-urlencoded 传递参数

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

java restful application/x-www-form-urlencoded 传递参数

情景:

        在发送短信的时候,要使用x-www-form-urlencoded的编码格式进行传递参数。 

具体要求:

参数名称

说明

备注

userId

用户名

timespan

时间戳

格式为yyyyMMddHHmmss

password

密码

此处用原始密码+时间戳

做MD5加密,32位大写格式

 

phone

手机号

多个用英文逗号隔开

msgType

编码类型

选填,如果不填默认为GBK,可以选填GBK

或者UTF8/UTF-8

content

内容

做base64加密操作,编码方式

使用msgType中的方式,如果msgType有值的话

application/x-www-form-urlencoded 的情况下,restful那边要怎么处理参数呢?

一,HTTP上传的基本知识      

         在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型。
         application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。这是标准的编码格式。 
         multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。 
         text/plain:窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。
补充
         form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application /x-www-form-urlencoded。

         当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1& amp;name2=value2...),然后把这个字串append到url后面,用?分割,加载这个新的url。

         当action为post时候,浏览器把form数据封装到http body中,然后发送到server。

        如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。但是如果有type=file的话,就要用到multipart/form-data了。浏览器会把整个表单以控件为单位分割,并为每个部分加上 Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件 name)等信息,并加上分割符(boundary)。

  这部分来自:

https://www.cnblogs.com/lexus/archive/2012/03/19/2405526.html

作者:lexus

2,处理

设置 application/x-www-form-urlencoded

设置表头,参数用MultiValueMap 的格式

  public String sendNoticeContent(MultiValueMap param) {        String url = "xxxx";                 try {            HttpHeaders headers = new HttpHeaders();            headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);            RestTemplate restTemplate=new RestTemplate();            HttpEntity> httpEntity = new HttpEntity>(param, headers);            logger.info("短信接口接口请求url:{}, param: {}", url, JSON.toJSONString(httpEntity));            String resultStr = restTemplate.postForObject(url, param, String.class);            logger.info("sendNoticeContent result {}", resultStr);            // 如果返回字符串以-开头,也则提交失败,否则为提交成功            if(StringUtils.isBlank(resultStr) || resultStr.startsWith("-")){                throw new Exception("发送短信请求失败", resultStr +" "+ResultCodeEnum.getCodeMsgMap().get(resultStr));            }            return resultStr;        } catch (Exception e) {            e.printStackTrace();            throw new Exception("发送短信请求失败", e.getMessage());        }    }

异常码枚举类

import java.util.HashMap;import java.util.Map;public enum ResultCodeEnum {    NOT_USER("-101", "用户不存在"),ERROR_PWD("-102", "密码不正确"),NOT_SUFFICIENT_FUNDS("-103", "余额不足"),    ERROR_PARAM("-104", "参数格式有误"),ERROR_EXTEND_CODE("-105", "扩展码错误"),    OVER_SIZE("-106", "内容超长(500字)或内容为空"),ERROR_USER_STATE("-107", "用户状态异常"),    ERROR_AUTH_IP("-108", "Ip鉴权失败"),NOT_PARSE_CONTENT("-109", "内容解析异常"),UNKNOW_ERROR("-990", "未知异常");    private String code;    private String msg;    ResultCodeEnum(String code, String msg) {        this.code = code;        this.msg = msg;    }    public String getCode() {        return code;    }    public String getMsg() {        return msg;    }    public static Map getCodeMsgMap() {        Map codeMsgMap = new HashMap<>();        for (ResultCodeEnum m : ResultCodeEnum.values()) {            codeMsgMap.put(m.getCode(), m.getMsg());        }        return codeMsgMap;    }}

参数处理

public String sendNoticeConent(String userId, String password, String content, String phone){        String timespan = DateFormatUtils.format(new Date(), "yyyyMMddHHmmss");        MultiValueMap params= new LinkedMultiValueMap<>();        params.put("userId", Collections.singletonList(userId));        params.put("password", Collections.singletonList(Md5Utils.md5WithTimeStamp(password, timespan)));        params.put("timespan", Collections.singletonList(timespan));        params.put("content", Collections.singletonList(Base64Utils.encode(content)));        params.put("phone", Collections.singletonList(phone));        params.put("msgType", Collections.singletonList("UTF-8")); // 跟encode保持一致        return restResponsibleService.sendNoticeContent(params);    }

MD5加密

引用包:

implementation 'commons-codec:commons-codec:1.9'

代码:

    public static String md5WithTimeStamp(String text, String currentTimeSuffix ){        String content = text+currentTimeSuffix;        return DigestUtils.md5Hex(content).toUpperCase();    }

base64

import java.io.UnsupportedEncodingException;import java.util.Base64;import java.util.regex.Pattern;public class Base64Utils {    public static void main(String args[]) {        String sql = "select * from staff";        System.out.println(sql);        System.out.println(encode(sql));        System.out.println(decode(encode(sql)));        System.out.println(isBase64(encode(sql)));        System.out.println(isBase64(decode(encode(sql))));    }    private static final String UTF_8 = "UTF-8";    private static Base64.Encoder encoder;    //即为安全的编码方式,替换“+” “/” “-”为“_”    private static Base64.Decoder decoder;    static {        encoder = Base64.getEncoder();        decoder = Base64.getDecoder();    }    //encode    public static byte[] encode(byte[] bytes) {        return encoder.encode(bytes);    }    public static String encode(String content) {        byte[] encode = encode(content.getBytes());        try {            return new String(encode, UTF_8);        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        }        return null;    }    public static String encode2String(byte[] bytes) {        return encoder.encodeToString(bytes);    }    public static byte[] encode2Byte(String content) {        return encode(content.getBytes());    }    public static byte[] decode(byte[] bytes) {        return decoder.decode(bytes);    }    public static byte[] decode2Byte(String content) {        return decoder.decode(content.getBytes());    }    public static String decode2String(byte[] bytes) {        try {            return new String(decoder.decode(bytes),UTF_8);        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        }        return null;    }    public static String decode(String content) {        byte[] decode = decode(content.getBytes());        try {            return new String(decode, UTF_8);        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        }        return null;    }    public static Boolean isBase64(String str) {         String base64Pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";         return Pattern.matches(base64Pattern, str);    }}

postman直接请求

总结:

      使用restful请求application/x-www-form-urlencoded格式的内容,需要设置表头,参数用MultiValueMap 的格式来处理。

来源地址:https://blog.csdn.net/qq_35461948/article/details/130867629

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

java restful application/x-www-form-urlencoded 传递参数

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

详谈java编码互转(application/x-www-form-urlencoded)

本质上来说,java.net.UrlEncoder适用于将 String 转换为 application/x-www-form-urlencoded MIME 格式的静态方法 时 ,使用但!一般情况下,web应用中,当你的服务器,页面编码,
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录