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

PayPal NVP API模拟器响应格式问题:如何生成可正确解析的NVP结果?

问题描述

我开发了一款与PayPal NVP API交互的应用,同时正在开发模拟器以模拟PayPal NVP API的响应。

调用应用通过以下代码发起PayPal NVP请求:

ResponseEntity<String> response = paypalRestTemplate.postForEntity(paypalEndpoint, request, String.class);

并通过以下代码解析响应获取NVP元素:

List<NameValuePair> responseDataList = URLEncodedUtils.parse(responseContent, Charset.forName("UTF-8"));

模拟器代码:
控制器类签名如下:

@PostMapping (consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.TEXT_PLAIN_VALUE)
public ResponseEntity<String> transactions(
        @RequestParam MultiValueMap<String, String> paypalRequest) throws IOException, InterruptedException {

    return payPalService.processRequest(paypalRequest, delay);
}

模拟器服务类中,创建NameValuePair列表并添加字段:

List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("ACK",SUCCESS));
nameValuePairs.add(new BasicNameValuePair("name1","value1"));
nameValuePairs.add(new BasicNameValuePair("name2","value2"));
...

然后返回:

return new ResponseEntity<>(nameValuePairs.toString(), HttpStatus.OK);

但在PayPal服务类中,responseDataList解析结果异常:所有内容被解析为ACK=Success,name1=value1,name3=value3,其中ACK为键,其余内容为单个值,而非多个独立的键值对。请问如何让模拟器返回可被正确解析的NVP键值对?

解决方法

问题出在你调用了nameValuePairs.toString()生成响应内容,这个方法返回的是List的默认字符串格式(类似[ACK=Success,name1=value1,...]),并非PayPal NVP API要求的URL编码格式(键值对用&分隔,例如ACK=Success&name1=value1&name2=value2)。

你需要用URLEncodedUtils.format()工具方法生成符合要求的NVP格式字符串,修改服务类的返回代码:

import org.apache.http.client.utils.URLEncodedUtils;
import java.nio.charset.StandardCharsets;

// ...

return new ResponseEntity<>(URLEncodedUtils.format(nameValuePairs, StandardCharsets.UTF_8), HttpStatus.OK);

关键说明:

  • URLEncodedUtils.format()会将NameValuePair列表转换为标准URL编码格式,自动用&分隔各个键值对,同时对特殊字符做编码处理。
  • 调用方的URLEncodedUtils.parse()方法可以正确解析这种格式,得到独立的键值对列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 11:35:17