You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用RestTemplate解析URL参数化字符串响应为对象/Map

将URL编码的响应字符串转换为Map

因为你获取的响应是application/x-www-form-urlencoded格式,和请求参数格式一致,直接解析成Map<String, String>是最适合的方案,以下是两种可行的实现方式:

方法一:使用Spring内置工具类(推荐)

Spring的UriComponentsBuilder可以直接解析URL编码的字符串,自动处理解码和参数拆分,代码简洁可靠:

import org.springframework.web.util.UriComponentsBuilder;
import java.util.Map;

// 假设responseStr是你通过RestTemplate获取的响应字符串
String responseStr = "response=3&responsetext=1006: The specified transaction in the request is not allowed: REJECTED CONTACT CUST SERV\nREFID:1202053070&authcode=&transactionid=&avsresponse=&cvvresponse=&orderid=&type=sale&response_code=300&masked_merchant_number=";

// 解析为Map<String, String>
Map<String, String> responseMap = UriComponentsBuilder.newInstance()
        .query(responseStr)
        .build()
        .getQueryParams()
        .toSingleValueMap();

// 示例用法
System.out.println(responseMap.get("responsetext"));
// 输出:1006: The specified transaction in the request is not allowed: REJECTED CONTACT CUST SERV
// REFID:1202053070

说明:

  • 自动处理URL解码,无需手动处理特殊字符
  • 响应中包含换行的参数(比如responsetext)会被完整保留
  • 如果存在重复参数名,会自动取最后一个的值

方法二:手动解析(自定义逻辑)

如果不想依赖Spring的Web工具类,可以手动实现解析逻辑,灵活控制细节:

import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;

public static Map<String, String> parseUrlEncodedResponse(String response) {
    Map<String, String> resultMap = new HashMap<>();
    // 按&拆分所有键值对,忽略响应中的换行符
    String[] paramPairs = response.split("&");
    
    for (String pair : paramPairs) {
        int equalIndex = pair.indexOf('=');
        if (equalIndex == -1) {
            // 处理无值的参数(罕见情况)
            resultMap.put(pair, "");
            continue;
        }
        
        String key = pair.substring(0, equalIndex);
        String value = pair.substring(equalIndex + 1);
        
        // 解码URL编码的特殊字符
        try {
            value = URLDecoder.decode(value, StandardCharsets.UTF_8.name());
        } catch (Exception e) {
            // 解码失败时保留原始值
            e.printStackTrace();
        }
        
        resultMap.put(key, value);
    }
    return resultMap;
}

// 调用示例
String responseStr = "你的响应字符串";
Map<String, String> responseMap = parseUrlEncodedResponse(responseStr);

说明:

  • 可以自定义处理空值、重复参数的逻辑
  • 响应中的换行符会保留在对应参数值中,如需去除可手动添加value = value.replace("\n", "")

内容的提问来源于stack exchange,提问作者Nimila Hiranya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 14:23:13