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 方法是GET
、POST
、PUT
、TRACE
、DELETE
。 PATCH
不是 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?