diff --git a/pom.xml b/pom.xml index 23f8e121ed7379678afdded38830660221751ea1..99e295d738afa2ea9c3b727591deb08d11d79b5c 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 fcaa9310700075ae4a54571f16ec647906ed19f6..c827b4ed30f94fa20e5b2322aee73a83008b6afa 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 0000000000000000000000000000000000000000..1b45ac449ad2e454ea62728b8347fcf7c908ee3d --- /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 0000000000000000000000000000000000000000..a7e3e040d0d71ee7449e5d14ee74485071974ca7 --- /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