REST-API  -  Wie erstelle ich eine API-Resource in einer Java-Klasse

Hier erfährst Du, wie man ein Java-Klasse schreibt, die eine API implementiert. Ebenso ist die API entsprechend der OAS3 Konvention dokumentiert.

Die API ist später unter dem Pfad "SERVER/APP-CONTEXT/api/v1/version" aufrufbar.

Klassenname: VersionResource.java
package de.COMPANY.APPNAME.rest.resources;

import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import javax.inject.Inject;
import javax.servlet.ServletContext;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;

/**
* REST API Version. Gibt Versionsinformationen des aktuellen Kontextes aus.
*/
@Path("/version")
@Tag(name = "Version")
public class VersionResource {

    @Inject
    ServletContext servletContext;

    /**
    * Liefert Informationen zur aktuell deployten Version der WebApp
    *
    * @return Infos
    */
    @GET
    @Path("/")
    @Produces(APPLICATION_JSON)
    @Operation(summary = "Liefert Informationen zur aktuell deployten Version der WebApp",
    responses = {
        @ApiResponse(description = "Returns Title, Version, BuildBy, BuildJdk, BuildNumber, BuildTimestamp",
                responseCode = "200",
                content = @Content(
                        mediaType = APPLICATION_JSON,
                        schema = @Schema(implementation = VersionModel.class)
                )
        ),
        @ApiResponse(description = "Fehler beim Ermitteln der WebApp-Infos",
                responseCode = "400",
                content = @Content(
                        mediaType = MediaType.APPLICATION_JSON,
                        schema = @Schema(implementation = ErrorResponse.class)
                )
        )
    })
    public Response version() {
        try {
            return Response
                .status(200)
                .entity(VersionUtil.readInfosFromManifest(servletContext))
                .build();
        catch (Exception e) {
            ErrorResponse errorResponse = new ErrorResponse("Lese WebApp-Infos", e.getMessage());
            return Response
                .status(HttpStatus.SC_BAD_REQUEST)
                .header("Content-Type", MediaType.APPLICATION_JSON)
                .entity(errorResponse)
                .build();
            }
}

Weitere Dateien, die in der obigen Klasse verwendet werden:

- ErrorResponse.java

- VersionModel.java

- VersionUtil.java

Weitere Beispiel-Resource, die POST, sowie GET und application\pdf zurückliefert:

- SaperionImageResource.java