web-dev-qa-db-fra.com

Comment avoir une annotation @PATCH pour JAX-RS?

JAX-RS a des annotations pour les verbes HTTP tels que GET (@GET) et POST (@POST) mais il n'y a pas d'annotation @PATCH. Comment puis-je avoir une annotation pour le verbe HTTP PATCH?

Quelque chose comme ce qui suit: 

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

J'ai eu la réponse ici .

Il suffit de définir une annotation de correctif personnalisée, ce qui signifie que vous devrez écrire un fichier PATCH.Java avec le code suivant: 

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

Import le package contenant PATCH.Java et vous pourrez ensuite l'utiliser comme d'autres annotations de méthodes HTTP: 

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

J'ai utilisé ce @PATCH pour envoyer du JSON à mon service REST.

62
VishalDevgire

Vous utilisez JAX-RS 2.1?

JAX-RS 2.1 ajouté @PATCH à la liste des méthodes HTTP prises en charge.

Utiliser Swagger?

Lorsque vous utilisez Swagger pour documenter une API REST, vous pouvez utiliser l'annotation @PATCH existante définie dans le package io.swagger.jaxrs

Utiliser Jersey et Dropwizard?

Dropwizard définit un @PATCH annotation dans le package io.dropwizard.jersey.

Écrivez votre propre

Si les approches mentionnées ci-dessus ne fonctionnent pas pour vous, vous pouvez écrire votre propre annotation @PATCH:

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

L'annotation @HttpMethod est utilisée pour associer le nom d'une méthode HTTP à une annotation, créant ainsi ce que la spécification JAX-RS appelle la désignation de la méthode resource.

Votre propre annotation @PATCH devrait fonctionne correctement dans Swagger.

14
cassiomolin

L'API JAX-RS 2.0.1 n'a pas PATCH. Mais, en regardant le code JAX-RS API 2.2-SNAPSHOT, PATCH est maintenant inclus. Le code est:

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

Voici le lien .

Vous pouvez utiliser les mêmes codes pour y remédier jusqu'à ce que 2.2 soit disponible. Pour HttpMethod.PATCH, remplacez-le simplement par "PATCH".

1
Julez Jupiter

Si vous utilisez CXF 3.1.2 ou une version ultérieure ( source ), vous pouvez utiliser org.Apache.cxf.jaxrs.ext.PATCH.

0
oberlies

Si vous utilisez dropwizard , il contient io.dropwizard.jersey.PATCH. C'est exactement ce dont vous avez besoin.

0
Sergey Morozov