JAX-RS有针对GET (@GET)和POST (@POST)等超文本传输协议动词的批注,但没有@PATCH批注。如何才能拥有PATCH HTTP动词的批注?
类似于以下内容:
@PATCH
public Response someCode() {
// Code to handle the request
}发布于 2014-07-29 14:54:21
在Jersey中,这将工作得很好,但是当使用Jersey Client测试您的资源类时,您将得到异常:
java.net.ProtocolException: Invalid HTTP method: PATCH可以通过设置客户端属性来解决此问题
HttpUrlConnectorProvider.SET_METHOD_WORKAROUND 但是请稍等,然后您将得到以下异常:
javax.ws.rs.ProcessingException: java.net.ProtocolException: HTTP method PATCH doesn't support output因此,除了更改到Apache HTTP客户端库之外,没有其他方法,使用Jersey版本2.10,它很容易配置为使用Apache HTTP客户端,您只需覆盖扩展JerseyTest的测试类中的客户端配置方法。
@Override
protected void configureClient(ClientConfig config) {
config.register(CustomJacksonJsonProvider.class);
ConnectorProvider connectorProvider = new ApacheConnectorProvider();
config.connectorProvider(connectorProvider);
}您还需要添加另一个Maven依赖项jersey-apache-connector和jersey-test-framework-provider-external,请参阅Jersey doc
发布于 2017-08-23 13:46:15
JAX-RS API 2.0.1没有补丁。但是,看看JAX-RS API 2.2-SNAPSHOT代码,现在包含了补丁。代码是:
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@HttpMethod(HttpMethod.PATCH)
@Documented
public @interface PATCH {
}这是link。
在2.2发布之前,您可以使用相同的代码进行补救。对于补丁,只需将其替换为“HttpMethod.PATCH”。
发布于 2017-12-19 18:37:38
如果您使用的是CXF3.1.2或更高版本(source),则可以使用org.apache.cxf.jaxrs.ext.PATCH。
https://stackoverflow.com/questions/17897171
复制相似问题