Créons une application TODO avec Java 12 Processing lorsqu'une requête arrive avec une HttpMethod inutilisée ・ Traitement lorsqu'une erreur se produit sur le serveur

Bonjour.

Continuons à implémenter la gestion des exceptions jusqu'à la dernière fois!

Collection de liens de création d'application TODO

1: [Comprendre les super bases] Une brève description de MVC 2: [Préparer un modèle] Je veux créer un modèle avec Spring Initializr et créer un monde Hello 3: [Connexion / Paramètres / Affichage des données avec MySQL] Enregistrer les données temporaires dans MySQL-> Tout obtenir-> Afficher en haut 4: [Fonction POST] Implémentation de la fonction de publication 5: [Fonction PATCH] Basculer l'affichage TODO 6: [Easy to use JpaRepository] Implémentation de la fonction de recherche [7: [Commun avec les fragments de modèle Thymeleaf] Créer un en-tête] (https://qiita.com/nomad_kartman/items/8c33eca2880c43a06e40) [8: [Fonction PUT] Implémentation de la fonction d'édition] (https://qiita.com/nomad_kartman/items/66578f3f91a422f9207d) [9: [Tweak] Trier l'affichage TODO dans l'ordre chronologique + Régler la date d'échéance à la date d'aujourd'hui] (https://qiita.com/nomad_kartman/items/5ee2b13a701cf3eaeb15) 10: [Gestion des exceptions avec le ressort] Un bref résumé de la gestion des exceptions [11: [Gestion des exceptions avec ressort] Gestion des exceptions lors de l'accès à TODO avec un ID inexistant] (https://qiita.com/nomad_kartman/items/a486838153a563767169) 12: [Traitement des exceptions au printemps] Traitement lorsqu'une requête arrive avec un HttpMethod-Processing inutilisé lorsqu'une erreur se produit sur le serveur

Une brève description de HttpMethod

Qu'est-ce qu'une méthode HTTP? Je pense qu'il y a beaucoup de gens qui pensent cela, donc cette fois c'est une ébauche, mais je vais vous expliquer à quoi ça ressemble.

Comprenez légèrement ce que signifie visiter un site Web

Tout d'abord, j'aimerais que vous compreniez

Accéder au site Internet = Accéder au serveur sur Internet

à propos de ça.

Il existe diverses fonctions (telles que la fonction TODO) telles que l'affichage de HP sur ce serveur, et en cas d'accès, cela devrait fonctionner comme prévu par le créateur.

À propos, l'application TODO que je crée actuellement n'est pas publiée sur le Web, mais comme j'ai un serveur temporaire sur notre site local, lorsque je lance l'application, je peux accéder à localhost: 8080. Il est.

URL et HttpMethod

Eh bien, j'ai découvert que vous pouvez utiliser HP en accédant au serveur.

De quoi ai-je besoin pour accéder?

Tout d'abord, vous avez besoin de l'adresse de ce site!

Si le site est comme une maison, l'adresse sera l'adresse!

Si vous utilisez simplement HP normalement, vous avez seulement besoin de connaître l'adresse, mais lorsque vous faites réellement HP en tant que créateur Web, vous devez comprendre un autre concept HttpMethod.

En fait, lors de l'accès au site, nous utilisons quelque chose appelé HttpMethod pour demander l'accès.

En demandant l'URL du site + HttpMethod en même temps, le site détermine quelle page l'utilisateur souhaite visiter!

Par exemple, prenez l'exemple suivant.

com/example/todo/TodoController.java


@Controller
public class TodoController {

    @GetMapping("/top")
    public String top(Model model){
        return "top";
    }

C'est la partie qui affiche la première page de l'application TODO, mais ce à quoi je veux faire attention est

C'est la partie de @GetMapping ("/ top").

Cette annotation est par l'utilisateur

Le rôle est de spécifier dans le site URL / top '' ce que vous voulez faire lorsque vous faites une requête avec la méthode GET ''.

Par conséquent, si l'utilisateur fait une telle demande, la fonction `` top '' sera exécutée.

Si le site est à la maison et que l'adresse est une adresse, HttpMethod peut être comme une clé.

C'est comme la clé nécessaire pour entrer dans la pièce qui affiche la première page de la maison.

Vous pouvez accéder à la même URL avec différents HttpMethod

Par exemple, prenez l'exemple ci-dessous

com/example/todo/TodoController.java


@Controller
public class TodoController {

    @GetMapping("/top")
    public String top(Model model){
        return "top";
    }

    @PostMapping("/top")
    public String top(Model model){
        //Post-traitement
    }

J'ai ajouté le processus lorsque / top est accédé par la `` méthode POST ''.

L'URL elle-même pour accéder est la même, mais un traitement différent peut être réalisé en changeant la méthode HTTP au moment de la demande.

Divers HttpMethod

Eh bien, il existe différents types de HttpMethod, mais résumons les types typiques et leurs rôles.

GET
Utilisé lors de la récupération des ressources dans le site (Exemple: Afficher TODO (ressource) obtenu à partir de la base de données sur la première page)
POST
Utilisé lors de la publication de quelque chose (exemple: lors de la publication de TODO)
PUT
Remplacez le contenu des données (par exemple, téléchargez un fichier et changez tout le contenu)
PATCH
Mettre à jour, modifier et enregistrer une partie ou la totalité des données (exemple: lors de l'édition TODO)

Gestion des exceptions à la demande d'un HttpMethod inutilisé

com/example/todo/exception/TodoControllerAdvice.java


    @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
    public String badMethod() {
        log.warn("Bad Request");
        return "error/405.html";
    }

templates/error/405.html


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>405</title>
</head>
<body>
405!
</body>
</html>

Ajoutons les deux ci-dessus.

Vous pouvez voir comment rédiger des conseils de contrôleur en consultant l'article précédent.

Ici, 405.html s'affiche lorsque `` HttpRequestMethodNotSupportedException '' (une classe d'exception qui se produit lorsqu'une demande pour une HttpMethod qui n'existe pas est lancée) se produit.

Utilisons la `` commande Curl '' pour lancer une HttpMethod qui n'existe pas réellement!

Lancez l'application Todo et dans le terminal

$ curl -X POST "http://localhost:8080/top"

Type. Il s'agit d'envoyer une demande d'accès avec POST '' à / top '', qui implémente à l'origine le traitement uniquement avec `` GET ''.

Alors le résultat est Screen Shot 0002-10-25 at 17.01.14.png

Ça devrait ressembler à ça! Vous pouvez voir que 405 est affiché comme prévu.

Ensuite, définissez les paramètres lorsqu'une erreur se produit sur le serveur.

com/example/todo/exception/TodoControllerAdvice.java


    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ExceptionHandler(Exception.class)
    public String otherErrors() {
        log.error("Something went wrong");
        return "error/500.html";
    }

templates/error/500.html


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>500</title>
</head>
<body>
500!
</body>
</html>

En les ajoutant, vous pouvez maintenant afficher la page avec 500 erreurs lorsque la «classe d'exception» se produit!

Recommended Posts

Créons une application TODO avec Java 12 Processing lorsqu'une requête arrive avec une HttpMethod inutilisée ・ Traitement lorsqu'une erreur se produit sur le serveur
Créons une application TODO en Java 11 Gestion des exceptions lors de l'accès à un TODO avec un ID inexistant
Créons une application TODO en Java 5 Changer l'affichage de TODO
Faisons une application de calculatrice avec Java ~ Créez une zone d'affichage dans la fenêtre
Lors de l'utilisation d'une liste en Java, java.awt.List sort et une erreur se produit
Créons une application TODO en Java 4 Implémentation de la fonction de publication
Collecte des informations client lorsqu'une erreur se produit dans une application Web
Créons une application TODO en Java 6 Implémentation de la fonction de recherche
Créons une application TODO en Java 8 Implémentation des fonctions d'édition
Créons une application TODO avec Java 1 Brève explication de MVC
Faisons une application TODO avec Java 2 Je veux créer un modèle avec Spring Initializr et créer Hello world
Une erreur se produit lorsque codedeploy-agent est installé dans Ubuntu Server 20.04
Créez un serveur Web simple avec la bibliothèque standard Java com.sun.net.httpserver
Créons une application TODO dans Java 13 TODO form validation 1: Character limit-Update Gradle to use @Validated
Créons une application TODO avec Java 3 Enregistrez les données temporaires dans MySQL-> Tout obtenir-> Afficher en haut
Créer une application TODO dans Java 7 Créer un en-tête
Un rappel lorsqu'une erreur aapt.exe se produit
Créons une application TODO en Java 9 Créer un affichage TODO Trier par date et heure + Définir la date d'échéance sur la date actuelle
Une erreur s'est produite lors de l'exécution d'une fonction avec CURSOR défini dans le paramètre OUT de MyBatis dans PostgreSQL.
Envoyer un e-mail lorsque le journal de niveau d'ERREUR se produit avec SMTP Appender de logback
Créons un processus chronométré avec la minuterie de Java! !!
L'histoire lorsque le conteneur ne démarre pas avec docker-compose up et qu'une erreur se produit
Personnalisez l'affichage lorsqu'une erreur telle que 404 Not Found se produit dans Spring Boot
Implémentez rapidement singleton avec enum en Java
Ce que j'ai appris lors de la création d'un serveur en Java
Déployez des applications Java développées localement avec Cloud Toolkit sur des instances Alibaba Cloud ECS
[Non résolu] Une exception se produit lorsqu'une connexion SSH est exécutée à l'aide de JSch à partir d'une application Java 6.
(Corrigé) Une erreur se produit lors de l'utilisation de Java 8 avec la dernière version (0.65.0) de Language Support for Java (TM) par Red Hat de VS Code.
Java learning_Behavior lorsqu'il y a un champ avec le même nom et une méthode avec le même nom dans deux classes dans une relation d'héritage
Résoudre l'erreur CreateProcess = 206 lors de l'exécution de Java dans un environnement Windows
Créer un SlackBot avec AWS lambda et API Gateway en Java
Créer une méthode pour renvoyer le taux de taxe en Java
Afficher une erreur détaillée dans Logger lors de l'exécution de Java sur le serveur
À propos du comportement lors de la création d'un mappage de fichiers avec Java
[Java] Comment rechercher des valeurs dans un tableau (ou une liste) avec la méthode contains