PayPal - Spring - 无效的HTTP方法:PATCH

时间:2014-11-08 17:41:23

标签: java spring spring-mvc paypal paypal-rest-sdk

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

  

引起:java.net.ProtocolException:无效的HTTP方法:PATCH   在java.net.HttpURLConnection.setRequestMethod(HttpURLConnection.java:428)   at 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

1 个答案:

答案 0 :(得分:1)

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

在任何一种情况下,如果您查看Paypal核心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
 */

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

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

对于SDK的REST API版本,最新版本似乎是0.11.2,它依赖于CORE SDK的“最新”版本,我再次认为这将解决您的问题。