tutorial servicios seguridad restful jaxrs jax español ejemplo cliente java jax-rs

java - servicios - ¿Cómo tener una anotación @PATCH para JAX-RS?



jaxrs java (6)

¿Usando JAX-RS 2.1?

JAX-RS 2.1 agregó @PATCH a la lista de métodos HTTP admitidos.

¿Usando Swagger?

Al usar Swagger para documentar una API REST, puede usar la anotación @PATCH existente definida en el paquete io.swagger.jaxrs .

¿Usando Jersey y Dropwizard?

Dropwizard define una anotación @PATCH en el paquete io.dropwizard.jersey .

Escribe lo tuyo

Si los enfoques mencionados anteriormente no funcionan para usted, puede escribir su propia anotación @PATCH :

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

La anotación @HttpMethod se usa para asociar el nombre de un método HTTP con una anotación, creando un lo que la especificación JAX-RS llama designador de método de recursos .

Su propia anotación @PATCH debería funcionar bien en Swagger.

JAX-RS tiene anotaciones para verbos HTTP como GET ( @GET ) y POST ( @POST ) pero no hay @PATCH anotación @PATCH . ¿Cómo puedo tener una anotación para el verbo PATCH HTTP?

Algo como lo siguiente:

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


En Jersey esto funcionará bien, pero al usar Jersey Client para probar su clase de recursos, obtendrá excepciones:

java.net.ProtocolException: Invalid HTTP method: PATCH

Hay una solución para esto, al establecer la propiedad del cliente

HttpUrlConnectorProvider.SET_METHOD_WORKAROUND

Pero espera, entonces terminarás con la siguiente excepción:

javax.ws.rs.ProcessingException: java.net.ProtocolException: HTTP method PATCH doesn''t support output

Así que no hay otra manera que cambiar a la biblioteca del cliente Apache HTTP, utilizando la versión 2.10 de Jersey, es fácil de configurar para usar el cliente Apache HTTP, solo necesita reemplazar el método de configuración del cliente en su clase de prueba que extiende JerseyTest .

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

Y también necesita agregar otra dependencia de Maven, jersey-apache-connector y jersey-test-framework-provider-external , ver Jersey doc


JAX-RS API 2.0.1 no tiene PATCH. Pero, mirando el código JAX-RS API 2.2-SNAPSHOT, PATCH ahora está incluido. El código es:

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

Aquí está el link .

Puede usar los mismos códigos para el remedio hasta que 2.2 esté fuera. Para HttpMethod.PATCH, simplemente reemplázalo con "PATCH".


Si está utilizando dropwizard , contiene io.dropwizard.jersey.PATCH . Es exactamente lo que necesitas.


Si está utilizando CXF 3.1.2 o posterior ( source ), puede usar org.apache.cxf.jaxrs.ext.PATCH .


Tengo respuesta here .

Uno solo tendrá que definir una anotación de parche personalizada, lo que eso significa es que tendrá que escribir un archivo PATCH.java con el siguiente código:

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

Importe el paquete que contiene PATCH.java y luego puede usarlo como otras anotaciones de método HTTP:

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

Utilicé este @PATCH para enviar algunos JSON a mi servicio REST.