`
liudunxu2
  • 浏览: 32887 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
文章分类
社区版块
存档分类
最新评论

api param参数转换为hashmap java

 
阅读更多
/**
	 * 根据api参数字符串获取api参数映射
	 * @param url
	 * @return
	 */
	public static HashMap<String, String> GetApiParamMap(String url){
		HashMap<String, String> paramsMap = new HashMap<String, String>();
		if(!StringUtils.isEmpty(url)){
			String[] keyVlauePairAry = url.split("&");
			for (String keyVlauePair : keyVlauePairAry) {
				if (StringUtils.isNotBlank(keyVlauePair)) {
					int equalIndex = keyVlauePair.indexOf('=');
					 if(equalIndex==-1 || equalIndex>=keyVlauePair.length()-1) continue;
					 String titleString = keyVlauePair.substring(0, equalIndex);
					 String titleValueString = keyVlauePair.substring(equalIndex+1,keyVlauePair.length());
					 paramsMap.put(titleString,titleValueString);
				}
			}
		}
		return paramsMap;
	}

netty中的实现

 private Map<String, List<String>> decodeParams(String s) {
        Map<String, List<String>> params = new LinkedHashMap<String, List<String>>();
        String name = null;
        int pos = 0; // Beginning of the unprocessed region
        int i;       // End of the unprocessed region
        char c = 0;  // Current character
        for (i = 0; i < s.length(); i++) {
            c = s.charAt(i);
            if (c == '=' && name == null) {
                if (pos != i) {
                    name = decodeComponent(s.substring(pos, i), charset);
                }
                pos = i + 1;
            } else if (c == '&') {
                if (name == null && pos != i) {
                    // We haven't seen an `=' so far but moved forward.
                    // Must be a param of the form '&a&' so add it with
                    // an empty value.
                    addParam(params, decodeComponent(s.substring(pos, i), charset), "");
                } else if (name != null) {
                    addParam(params, name, decodeComponent(s.substring(pos, i), charset));
                    name = null;
                }
                pos = i + 1;
            }
        }

        if (pos != i) {  // Are there characters we haven't dealt with?
            if (name == null) {     // Yes and we haven't seen any `='.
                addParam(params, decodeComponent(s.substring(pos, i), charset), "");
            } else {                // Yes and this must be the last value.
                addParam(params, name, decodeComponent(s.substring(pos, i), charset));
            }
        } else if (name != null) {  // Have we seen a name without value?
            addParam(params, name, "");
        }

        return params;
    }

    private static String decodeComponent(String s, Charset charset) {
        if (s == null) {
            return "";
        }

        try {
            return URLDecoder.decode(s, charset.name());
        } catch (UnsupportedEncodingException e) {
            throw new UnsupportedCharsetException(charset.name());
        }
    }

    private static void addParam(Map<String, List<String>> params, String name, String value) {
        List<String> values = params.get(name);
        if (values == null) {
            values = new ArrayList<String>(1);  // Often there's only 1 value.
            params.put(name, values);
        }
        values.add(value);
    }


分享到:
评论

相关推荐

    Java操作mongoDB使用文档.docx(16页.docx

    创建一个`Map`对象,将数据放入其中,然后将其转换为`DBObject`: ```java Map, String&gt; data = new HashMap(); data.put("key", "value"); DBObject dbObject = new BasicDBObject(data); DBCollection dbcol = ...

    javadoc-6.0.1

    《Java API文档详解——以javadoc-6.0.1为例》 在编程领域,Java API(Application Programming Interface)是开发者进行程序设计的重要参考资源,它详细定义了Java语言的各种类、接口、方法以及它们的功能和用法。...

    Java基础知识小结

    Java基础知识是每个Java开发者必须掌握的核心内容,涵盖了文件操作、数据类型转换、注释使用、性能优化等多个方面。以下是对这些知识点的详细说明: 1. **getPath(), getAbsolutePath(), getCanonicalPath()的区别*...

    IT java 面试题库

    ### IT Java面试题库知识点详解 #### 一、面向对象语言特性 1. **描述一下“Java中面向对象几个典型的面向对象特性”?** - **封装**: 封装是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息...

    json struts2转换

    4. **JSON参数绑定**:在接收JSON请求时,Struts2可以通过`@Param`注解来绑定JSON参数。例如: ```java public String updateUser(@Param("username") String name, @Param("email") String email) { // 更新用户...

    Java语言编程规范--华为技术有限公司

    - Javadoc:使用`/** */`为类、接口和方法生成文档,遵循`@param`、`@return`、`@throws`等标签。 3. **代码结构** - 每个类应有明确的职责,遵循单一职责原则(SRP)。 - 使用接口定义行为,实现类提供具体实现...

    图片带参数上传(android)

    接下来,我们要将图片转换为适合上传的格式,通常是Bitmap或Base64编码的字符串。这里我们使用Bitmap: ```java Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImage)...

    利用java生成二维码工具类示例代码

    Java生成二维码工具类是开发中常见的一种功能,用于将数据编码为二维图形,方便通过手机等设备快速扫描读取。本文将详细介绍如何使用Java来创建二维码,并提供一个完整的示例代码。 首先,二维码(Quick Response ...

    使用FineReport报表二次开发详述

    这里的`stuff.cpt`文件是通过FineReport设计器生成的模板文件,通过`TemplateImporter`类的`generate`方法可以将其转换为`WorkBook`对象,进而用于进一步的数据处理。 **保存成模板文件** ```java // CPT // 清空...

    JdbcTemplate.rar

    - **Map参数**:`MapSqlParameterSource`或`HashMap`作为参数。 - **Java Bean参数**:使用`BeanPropertySqlParameterSource`。 ### 6. **事务管理** JdbcTemplate提供了`executeWithinTransaction`方法,用于在...

    Android应用源码之调用安卓自带文本朗读.zip

    Android系统内置了TTS引擎,它能够将文本转换为合成语音。开发者可以通过调用相关的API来实现这一功能。首先,需要在应用中添加对应的权限声明,如在AndroidManifest.xml中加入`...

    spring整合mysql的一些基本操作

    1. **JDBC基础**:Spring整合MySQL的基础是Java Database Connectivity (JDBC),它是Java与数据库交互的标准API。首先需要在项目中引入MySQL的JDBC驱动库,如`mysql-connector-java`。 2. **DataSource配置**:...

    Android代码-安卓语音合成

    在Android平台上,语音合成(Speech Synthesis)是一种技术,它允许应用程序将文本转换为自然语言的音频输出。这个过程也被称为TTS(Text-to-Speech)。Android提供了内置的支持来实现这个功能,使得开发者能够轻松...

    spring自带的jdbcTemplate查询、插入预编译使用

    `是预编译的占位符,`params`数组包含了实际参数,`MyRowMapper`是一个自定义的映射器,用于将查询结果转换为Java对象。 接下来,让我们看看如何使用`jdbcTemplate`进行预编译的插入操作。`update()`方法可以用来...

    springboot访问https最完整的代码

    **解析**:此方法接收一个键值对 Map 作为输入,并将其转换为一系列 `NameValuePair` 对象组成的列表。这些对象将在后续的 HTTP 请求中作为查询字符串或 POST 数据传递。 ##### 2. HTTPS 请求初始化 ```java ...

    struts2要使用json必须的两个包

    例如,你可以将Java的HashMap、ArrayList等数据结构轻松地转换成JSON字符串,或者将接收到的JSON字符串解析成Java对象。`json-lib`库支持多种版本的JDK,这里的`-jdk15.jar`版本意味着它是为JDK1.5编译的,确保了与...

    Android 调用安卓自带文本朗读-IT计算机-毕业设计.zip

    TTS服务可以将字符串转换为流式音频,提供多种语言和发音风格供用户选择。首先,需要在AndroidManifest.xml中添加必要的权限: ```xml ``` 2. 初始化TTS引擎: 在应用程序中,我们需要创建一个`TextToSpeech`...

    调用安卓自带文本朗读.zip

    在Android系统中,文本朗读(Text-to-Speech, TTS)是一项重要的辅助功能,它允许应用程序将文本转换为语音输出,对视力障碍或者阅读困难的用户尤其有用。本资源"调用安卓自带文本朗读.zip"可能包含了关于如何在...

    JavaDocumentation

    Java Documentation 是Java编程语言的重要组成部分,它为开发者提供了详尽的API参考和使用指南,帮助他们理解和使用Java类库。这份文档通常包含了类、接口、方法、构造函数等的详细说明,以及示例代码,是Java开发者...

    springboot整合mybatis-plus实现多表分页查询

    这里,我们设置了主键类型为自动增长(`id-type: AUTO`)和驼峰命名转换(`map-underscore-to-camel-case: true`),这将帮助我们在Java对象与数据库表字段之间进行自动映射。 现在,我们需要定义实体类,这些类将...

Global site tag (gtag.js) - Google Analytics