我正在尝试使用 JAX-RS 的 CXF 实现在我的客户端中使用 PATCH 方法。起初我将 PATCH 注释定义为
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@HttpMethod("PATCH")
public @interface PATCH {
}
参考这里写的: How to have a @PATCH annotation for JAX-RS?
然后我发现@PATCH 被添加到 CXF 3.1.2 中,所以我在我的 maven 的 pom.xml 中更改了版本,确实有public @interface PATCH
里面,package org.apache.cxf.jaxrs.ext;
代码实际上看起来和我上面发布的完全一样。
但是,当我尝试在我的服务定义上使用此注释时
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public interface AbcService {
@PATCH
@Path("/abc/efg")
public SomeDTO patchSomething(RequestObject request);
}
我最终得到了java.net.ProtocolException: Invalid HTTP method: PATCH
我在上面发布的问题链接中所说的。他们与 Jersey 讨论了一些解决方案,但是我可以在 CXF 中做什么,以便我可以使用:
AbcService abcService = JAXRSClientFactory.create(myURI, AbcService.class, myProviders, true);
abcService.patchSomething(new RequestObject('something'));
所以我有几个问题:
- 我怎样才能使这项工作?不,我需要编写自定义 CXF 拦截器吗?
- 如果它不起作用,他们为什么要将 PATCH 注释添加到 CXF 中?
- 另一个主题中的一些人说,上面提到的 PATCH 注释定义对他们有用。怎么会 ?它是否只会在客户端造成麻烦,如果是这样,为什么会这样?
- 为什么我在 CXF 文档中找不到这个注释?我在http://cxf.apache.org/javadoc/latest/查看了 org.apache.cxf.jaxrs.ext 包,但没有看到任何补丁。然而在最新的 cxf 3.1.2 中,我真的可以在这个包中找到它。