From 258f02f96a98430fd9045cc2162283b90eb2939f Mon Sep 17 00:00:00 2001 From: Emmanuel Bruno <emmanuel.bruno@univ-tln.fr> Date: Tue, 2 Feb 2021 21:31:47 +0100 Subject: [PATCH] fixes exec. --- pom.xml | 6 ++--- .../jaxrs/resources/BiblioResource.java | 9 +++++++ .../bruno/samples/jaxrs/status/Status.java | 20 ++++++++++++++ .../samples/jaxrs/status/StatusFilter.java | 27 +++++++++++++++++++ 4 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 src/main/java/fr/univtln/bruno/samples/jaxrs/status/Status.java create mode 100644 src/main/java/fr/univtln/bruno/samples/jaxrs/status/StatusFilter.java diff --git a/pom.xml b/pom.xml index 23f8e12..99e295d 100644 --- a/pom.xml +++ b/pom.xml @@ -105,9 +105,6 @@ <version>3.11</version> <scope>test</scope> </dependency> - - - </dependencies> <build> <plugins> @@ -134,7 +131,7 @@ </execution> </executions> <configuration> - <mainClass>fr.univtln.bruno.samples.jaxrs.server.BiblioServer</mainClass> + <mainClass>${main.class}</mainClass> </configuration> </plugin> @@ -329,5 +326,6 @@ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <sonar.coverage.jacoco.xmlReportPaths>target/site/jacoco-merged-coverage-report/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths> + <main.class>fr.univtln.bruno.samples.jaxrs.server.BiblioServer</main.class> </properties> </project> diff --git a/src/main/java/fr/univtln/bruno/samples/jaxrs/resources/BiblioResource.java b/src/main/java/fr/univtln/bruno/samples/jaxrs/resources/BiblioResource.java index fcaa931..c827b4e 100644 --- a/src/main/java/fr/univtln/bruno/samples/jaxrs/resources/BiblioResource.java +++ b/src/main/java/fr/univtln/bruno/samples/jaxrs/resources/BiblioResource.java @@ -5,6 +5,7 @@ import fr.univtln.bruno.samples.jaxrs.exceptions.IllegalArgumentException; import fr.univtln.bruno.samples.jaxrs.exceptions.NotFoundException; import fr.univtln.bruno.samples.jaxrs.model.BiblioModel; import fr.univtln.bruno.samples.jaxrs.model.BiblioModel.Auteur; +import fr.univtln.bruno.samples.jaxrs.status.Status; import jakarta.ws.rs.*; import jakarta.ws.rs.core.MediaType; @@ -38,7 +39,15 @@ public class BiblioResource { return modeleBibliotheque.updateAuteur(id, auteur); } + /** + * Status annotation is a trick to fine tune 2XX status codes (see the status package). + * + * @param auteur + * @return + * @throws IllegalArgumentException + */ @POST + @Status(Status.CREATED) @Path("auteurs") @Consumes(MediaType.APPLICATION_JSON) public Auteur ajouterAuteur(Auteur auteur) throws IllegalArgumentException { diff --git a/src/main/java/fr/univtln/bruno/samples/jaxrs/status/Status.java b/src/main/java/fr/univtln/bruno/samples/jaxrs/status/Status.java new file mode 100644 index 0000000..1b45ac4 --- /dev/null +++ b/src/main/java/fr/univtln/bruno/samples/jaxrs/status/Status.java @@ -0,0 +1,20 @@ +package fr.univtln.bruno.samples.jaxrs.status; + +import jakarta.ws.rs.NameBinding; +import jakarta.ws.rs.core.Response; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + + +@NameBinding +@Retention(RetentionPolicy.RUNTIME) +public @interface Status { + int CREATED = 201; + int ACCEPTED = 202; + int NO_CONTENT = 204; + int RESET_CONTENT = 205; + int PARTIAL_CONTENT = 206; + + int value(); +} \ No newline at end of file diff --git a/src/main/java/fr/univtln/bruno/samples/jaxrs/status/StatusFilter.java b/src/main/java/fr/univtln/bruno/samples/jaxrs/status/StatusFilter.java new file mode 100644 index 0000000..a7e3e04 --- /dev/null +++ b/src/main/java/fr/univtln/bruno/samples/jaxrs/status/StatusFilter.java @@ -0,0 +1,27 @@ +package fr.univtln.bruno.samples.jaxrs.status; + +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerResponseContext; +import jakarta.ws.rs.container.ContainerResponseFilter; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.Provider; + +import java.io.IOException; +import java.lang.annotation.Annotation; + +@Provider +public class StatusFilter implements ContainerResponseFilter { + + @Override + public void filter(ContainerRequestContext containerRequestContext, ContainerResponseContext containerResponseContext) throws IOException { + if (containerResponseContext.getStatus() == Response.Status.OK.getStatusCode()) { + for (Annotation annotation : containerResponseContext.getEntityAnnotations()) { + if (annotation instanceof Status) { + containerResponseContext.setStatus(((Status) annotation).value()); + break; + } + } + } + } + +} \ No newline at end of file -- GitLab