JAX-RS 具有 HTTP 谓词的注释,如 GET
(@GET
)和 POST
(@POST
),但没有@PATCH
注释。如何为补丁
HTTP 动词添加注释?
如下所示:
@PATCH
public Response someCode() {
// Code to handle the request
}
在泽西岛,这可以正常工作,但是当使用泽西岛客户端测试您的资源类时,您将获得异常:
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文档
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中应该可以正常工作。
我在这里得到了答案。
只需定义一个自定义补丁注释,这意味着您必须使用以下代码编写一个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