// Déclaration du package où se trouve la classe.
package com.example.util;

// Import des classes nécessaires.
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
import javax.servlet.http.HttpServletResponse;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;

// Définition de la classe ServletUtils.
public class ServletUtils {

    // Méthode pour lire et parser un objet JSON à partir de la requête HTTP.
    public static JsonObject parseJsonRequest(javax.servlet.http.HttpServletRequest request) throws IOException {
        try (BufferedReader reader = request.getReader();
             JsonReader jsonReader = Json.createReader(reader)) {
            return jsonReader.readObject();
        }
    }

    // Méthode pour valider les données dans un objet JSON.
    public static void validateRequestData(JsonObject data, String... keys) throws IOException {
        for (String key : keys) {
            if (data.getString(key, "").isEmpty()) {
                throw new IOException("Missing required field: " + key);
            }
        }
    }

    // Méthode pour convertir un ResultSet SQL en chaîne JSON.
    public static String convertResultSetToJson(ResultSet resultSet) throws SQLException {
        return ResultSetTableDisplay.toJson(resultSet);
    }

    // Méthode de validation supplémentaire pour les données de couleur spécifiques.
    public static void validateRequestData(JsonObject data) throws IOException {
    if (data.getString("nom", "").isEmpty() || data.getString("hexadecimal_rvb", "").isEmpty()) {
        throw new IOException("Missing color name or hexadecimal value");
        }
    }

    // Méthode pour envoyer une réponse JSON.
    public static void sendJsonResponse(HttpServletResponse response, String json) throws IOException {
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        try (PrintWriter out = response.getWriter()) {
            out.print(json);
        }
    }

    // Méthode pour gérer les exceptions SQL et envoyer une réponse d'erreur.
    public static void handleSqlException(HttpServletResponse response, SQLException ex) throws IOException {
        // Log SQL Exception here
        sendErrorResponse(response, HttpServletResponse.SC_BAD_REQUEST, "SQL Error: " + ex.getMessage());
    }

    // Méthode pour envoyer des réponses d'erreur HTTP.
    public static void sendErrorResponse(HttpServletResponse response, int statusCode, String message) throws IOException {
        response.sendError(statusCode, message);
    }
}

 

Explication Générale:

  • ServletUtils est une classe utilitaire contenant des méthodes statiques pour aider à gérer les requêtes et les réponses HTTP dans une application servlet.
  • Elle fournit des méthodes pour lire et parser des objets JSON à partir des requêtes, valider les données de la requête, convertir les ResultSet en JSON, et envoyer des réponses JSON ou des réponses d'erreur.
  • Ces méthodes aident à simplifier et à centraliser la logique récurrente liée au traitement des requêtes et des réponses dans les servlets, rendant le code des servlets plus propre et plus facile à gérer.

Explication Détaillée:

  1. parseJsonRequest(HttpServletRequest request):

    • But: Lire et parser un objet JSON à partir d'une requête HTTP.
    • Fonctionnement: Utilise un BufferedReader pour lire le corps de la requête, puis un JsonReader pour convertir le texte en un objet JSON (JsonObject).
    • Utilisation typique: Appelée dans les servlets pour obtenir les données JSON envoyées par le client.
  2. validateRequestData(JsonObject data, String... keys):

    • But: Valider la présence de certains champs dans un objet JSON.
    • Fonctionnement: Parcourt la liste des clés spécifiées et vérifie si elles sont présentes et non vides dans l'objet JSON.
    • Utilisation typique: Utilisée pour s'assurer que les données requises sont présentes dans les requêtes JSON avant de procéder au traitement.
  3. convertResultSetToJson(ResultSet resultSet):

    • But: Convertir un ResultSet SQL en chaîne de caractères JSON.
    • Fonctionnement: Utilise ResultSetTableDisplay.toJson(resultSet) pour transformer le contenu du ResultSet en JSON.
    • Utilisation typique: Transforme les données récupérées de la base de données en JSON pour les envoyer au client.
  4. validateRequestData(JsonObject data) (Méthode surchargée):

    • But: Valider les données spécifiques pour les requêtes liées à la couleur.
    • Fonctionnement: Vérifie que les champs 'nom' et 'hexadecimal_rvb' sont présents et non vides.
    • Utilisation typique: Utilisée dans les servlets gérant les données de couleur pour valider les entrées.
  5. sendJsonResponse(HttpServletResponse response, String json):

    • But: Envoyer une réponse JSON au client.
    • Fonctionnement: Définit le type de contenu et l'encodage de la réponse, puis écrit la chaîne JSON dans le flux de sortie de la réponse.
    • Utilisation typique: Envoie les données JSON au client après traitement côté serveur.
  6. handleSqlException(HttpServletResponse response, SQLException ex):

    • But: Gérer les exceptions SQL et envoyer une réponse d'erreur appropriée.
    • Fonctionnement: Envoie une réponse d'erreur HTTP avec le statut "Bad Request" et le message d'erreur SQL.
    • Utilisation typique: Attrape et gère les exceptions SQL survenues pendant les interactions avec la base de données.
  7. sendErrorResponse(HttpServletResponse response, int statusCode, String message):

    • But: Envoyer une réponse d'erreur HTTP.
    • Fonctionnement: Envoie une réponse d'erreur avec un code d'état spécifié et un message d'erreur.
    • Utilisation typique: Utilisée pour informer le client des erreurs survenues côté serveur.

Chacune de ces méthodes joue un rôle clé dans la gestion des requêtes et réponses HTTP, la manipulation des données JSON, et la gestion des erreurs dans une application web Java utilisant des servlets.

Modifié le: mercredi 22 novembre 2023, 07:10