当前位置: 首页 > 知识库问答 >
问题:

如何为JAX-RS提供@PATCH注释?

郎曜文
2023-03-14

JAX-RS 具有 HTTP 谓词的注释,如 GET@GET)和 POST@POST),但没有@PATCH注释。如何为补丁 HTTP 动词添加注释?

如下所示:

@PATCH
public Response someCode() {
    // Code to handle the request
}

共有3个答案

柴阳云
2023-03-14

在泽西岛,这可以正常工作,但是当使用泽西岛客户端测试您的资源类时,您将获得异常:

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

因此,除了使用Jersey 2.10版的Apache HTTP客户端库之外,没有其他方法,很容易配置为使用Apache HTTP客户端,您只需要在扩展< code>JerseyTest的测试类中覆盖客户端配置方法。

@Override
protected void configureClient(ClientConfig config) {
  config.register(CustomJacksonJsonProvider.class);
  ConnectorProvider connectorProvider = new ApacheConnectorProvider();
  config.connectorProvider(connectorProvider);
}

您还需要添加另一个Maven依赖项,jersey apache连接器Jerrey测试框架提供程序外部,请参阅jersey文档

周作人
2023-03-14

JAX-RS 2.1将< code>@PATCH添加到支持的HTTP方法列表中。

使用 Swagger 记录 REST API 时,可以使用 io.swagger.jaxrs 包中定义的现有@PATCH注释。

Dropwizard在<code>io.Dropwizard中定义了<code>补丁package。

如果上面提到的方法不适合你,你可以编写自己的@PATCH注释:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@HttpMethod("PATCH")
public @interface PATCH { }

@HttpMethod注释用于将HTTP方法的名称与注释关联起来,从而创建JAX-RS规范所称的资源方法指示符。

您自己的@PATCH注释在Swagger中应该可以正常工作。

昝涛
2023-03-14

我在这里得到了答案。

只需定义一个自定义补丁注释,这意味着您必须使用以下代码编写一个PATCH.java文件:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@HttpMethod("PATCH")
public @interface PATCH {
}

导入包含PATCH.java的包,然后可以像使用其他HTTP方法注释一样使用它:

@PATCH
@Path("/data/{keyspace}")
@Produces({ "application/json" })
public void patchRow(@PathParam("keyspace") String keyspace, String body) 
throws Exception

我使用这个@PATCH向我的REST服务发送了一些JSON。

 类似资料:
  • 问题内容: JAX- RS具有用于HTTP动词的注释,例如()和(),但是没有注释。如何为HTTP动词添加注释? 类似于以下内容: 问题答案: 我在这里得到答复。 只需定义一个自定义的Patch批注,这意味着您将必须使用以下代码编写一个 PATCH.java 文件: 导入 包含PATCH.java 的 包 ,然后可以像其他HTTP方法注释一样使用它: 我使用此@PATCH将一些JSON发送到我的R

  • 问题内容: 我正在使用Jersey JAX- RS客户端(2.0版)。我知道它正在使用Jackson的ObjectMapper生成和解析JSON。我想使用同一对象为某些Java类生成JSON,以便可以将它们写入日志。 我知道我可以创建一个ObjectMapper的新实例,但是我希望请求Jersey Client给我一个有关它正在使用的实例的引用。我怎样才能做到这一点?Jersey 2.0知道Jac

  • 问题内容: 谁能给我解释一下JAX-RS Provider是什么,’@ Provider’注释是什么?我一直在阅读文档,但无法理解。 如果存在为传入请求提供服务的资源类,提供者将做什么?当我创建一个持久性资源类(不是每个请求一个)时,它们与单例资源类有何不同?还是那些课程也是提供者? 问题答案: 提供者是扩展和定制JAX-RS运行时的简单方法。您可以将它们视为可以(可能)更改运行时行为的插件,以实

  • 我正在使用泽西JAX-RS客户端(版本2.0)。我知道它使用Jackson ObjectMapper来生成和解析JSON。我想使用相同的对象为一些java类生成JSON,这样我就可以将它们写入日志。 我知道我可以创建一个新的ObjectMapper实例,但我更喜欢请求泽西客户端给我一个它正在使用的引用。我该怎么做呢?泽西2.0知道Jackson,因为它包含一个JacksonFeature类,该类首

  • 问题内容: 我有以下class和web.xml文件。spring框架是否支持jax-rs注释,如和,…等。 换句话说我可以代替 Java: web.xml 问题答案: 不,您不能在春季使用批注。您可以在spring上使用类似的东西。这很容易。如果需要,我可以提供一个示例。(Jersey和CXF也具有良好的JAX- RS实现。) AFAIK Springsource不知道要提供JAX-RS的实现。因

  • 我对Jackson注释有一个问题,在《大部头1》中似乎被忽略了。我使用Jackson将REST响应序列化为JSON。我打开了设置: openejb。cxf。jax-rs.providers=org。科德豪斯。杰克逊。jaxrs。JacksonJsonProvider在系统中。属性 Jackson序列化工作正常,除了所有似乎被完全忽略的Jackson注释。事件像@JsonIgnore或@JsonPr