PayPal - Spring - HTTP 方法无效:PATCH

Posted

技术标签:

【中文标题】PayPal - Spring - HTTP 方法无效:PATCH【英文标题】:PayPal - Spring - Invalid HTTP method: PATCH 【发布时间】:2015-01-05 08:36:24 【问题描述】:

当我尝试在基于 Spring MVC 的应用程序上使用 PayPal REST API 更新计费计划的状态时,我遇到了 ProtocolException。我的堆栈跟踪如下:

原因:java.net.ProtocolException:无效的 HTTP 方法:PATCH 在 java.net.HttpURLConnection.setRequestMethod(HttpURLConnection.java:428) 在 sun.net.www.protocol.https.HttpsURLConnectionImpl.setRequestMethod(HttpsURLConnectionImpl.java:374) 在 com.paypal.core.DefaultHttpConnection.createAndconfigureHttpConnection(DefaultHttpConnection.java:83) 在 com.paypal.core.rest.PayPalResource.execute(PayPalResource.java:364)

我该如何解决这个问题?

编辑:

这是我的控制器代码:

Plan createdPlan = plan.create(accessToken);  //Create a Billing Plan
createdPlan.setState("ACTIVE");  //Change state of created plan to 'ACTIVE'
createdPlan.update(accessToken);  //Call update method of com.paypal.api.payments.Plan class

Plan.java

PayPal REST API 仅允许 PATCH 请求更新计费计划,如 here 所记录的那样

【问题讨论】:

HTTP 方法是GETPOSTPUTTRACEDELETEPATCH不是 HTTP 方法。 你可以在这里发布你用来与 Paypal 通信的代码吗? @BuhakeSindi RFC 5789 会说:tools.ietf.org/html/rfc5789 【参考方案1】:

这里的答案将取决于您使用的是 Classic SDK 还是 REST SDK。

无论哪种情况,如果您查看 Paypal Core SDK here 的来源,似乎已经报告并修复了此问题。特别是在com.paypal.core.DefaultHttpConnection(Paypal SDK 中设置 PATCH HTTP 方法的类)的代码中,您现在将看到以下注释:

* Workaround for a bug in @code HttpURLConnection.setRequestMethod(String)
 * The implementation of Sun/Oracle is throwing a @code ProtocolException
 * when the method is other than the HTTP/1.1 default methods. So to use @code PATCH
 * and others, we must apply this workaround.
 *
 * See issue http://java.net/jira/browse/JERSEY-639
 */

所以我希望最新版本已经解决了这个问题。

因此,如果您使用的是 Classic SDK,只需使用 1.6.4 版本,因为它是最新的并且包含修复程序(如 here 所示)。

对于 SDK 的 REST API 版本,最新版本似乎是 0.11.2,它依赖于 CORE SDK 的“最新”版本,我再次假设它可以解决您的问题。

【讨论】:

我使用的是 SDK 的 REST API 版本,更新版本似乎已经解决了这个问题。谢谢。 我在使用 REST API 1.13 版时遇到了这个确切的问题。还有其他人吗?

以上是关于PayPal - Spring - HTTP 方法无效:PATCH的主要内容,如果未能解决你的问题,请参考以下文章

如何在spring控制器中配置paypal ipn监听器响应

如何使用 Spring Ws marshall 调用 Paypal ws?

关于经典nvp API paypal的HTTP get和post方法

使用 Spring MVC 的 Paypal 支付

对 Paypal 的 HTTP 请求

spring paypal api上下文问题