JAX-RS具有HTTP动词的注释,例如GET(@GET)和POST(@POST),但没有@PATCH注释.如何为PATCHHTTP动词添加注释?
类似于以下内容:
@PATCH
public Response someCode() {
// Code to handle the request
}
Run Code Online (Sandbox Code Playgroud)
Vis*_*ire 66
我在这里得到了答案.
只需要定义一个自定义Patch注释,这意味着您将必须使用以下代码编写PATCH.java文件:
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@HttpMethod("PATCH")
public @interface PATCH {
}
Run Code Online (Sandbox Code Playgroud)
导入包含PATCH.java的包,然后您可以像使用其他HTTP方法注释一样使用它:
@PATCH
@Path("/data/{keyspace}")
@Produces({ "application/json" })
public void patchRow(@PathParam("keyspace") String keyspace, String body)
throws Exception
Run Code Online (Sandbox Code Playgroud)
我使用这个@PATCH将一些JSON发送到我的REST服务.
cas*_*lin 19
JAX-RS 2.1添加@PATCH到支持的HTTP方法列表中.
使用Swagger记录REST API时,可以使用包中@PATCH定义的现有注释io.swagger.jaxrs.
Dropwizard@PATCH在io.dropwizard.jersey包中定义了一个注释.
如果上述方法不适合您,您可以编写自己的@PATCH注释:
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@HttpMethod("PATCH")
public @interface PATCH { }
Run Code Online (Sandbox Code Playgroud)
该@HttpMethod注释用于一个HTTP方法的名称与注释相关联,创建了JAX-RS规范要求什么资源的方法标志.
你自己的@PATCH注释应该在Swagger中正常工作.
小智 5
在 Jersey 中,这可以正常工作,但是当使用 Jersey 客户端测试您的资源类时,您将收到异常:
java.net.ProtocolException: Invalid HTTP method: PATCH
Run Code Online (Sandbox Code Playgroud)
有一个解决方法,通过设置客户端属性
HttpUrlConnectorProvider.SET_METHOD_WORKAROUND
Run Code Online (Sandbox Code Playgroud)
但是等等,那么你最终会遇到以下异常:
javax.ws.rs.ProcessingException: java.net.ProtocolException: HTTP method PATCH doesn't support output
Run Code Online (Sandbox Code Playgroud)
所以除了改用 Apache HTTP 客户端库之外别无他法,使用 Jersey 2.10 版,很容易配置使用 Apache HTTP 客户端,您只需要在扩展JerseyTest.
java.net.ProtocolException: Invalid HTTP method: PATCH
Run Code Online (Sandbox Code Playgroud)
并且您还需要添加另一个 Maven 依赖项,jersey-apache-connector并且jersey-test-framework-provider-external,请参阅Jersey 文档
| 归档时间: |
|
| 查看次数: |
28073 次 |
| 最近记录: |