0
votes

Obtenir le modèle de l'URL qui a été touché

J'ai le contrôleur MVC printemps ayant plusieurs API, je veux obtenir l'URI de l'API qui a été touché à partir de l'extrémité avant

J'ai un filtre extension d'une autre expérience qui intercepte chaque appel d'API, le filtre a une méthode qui accepte httpServletQuest , HttpServletResponse et filtre de filtre. Je peux obtenir l'URI à l'aide de requête.getrequesturi () mais dans le cas d'URI Les variables de chemin de temps permettent de dire uri = "q / v1 / règles / {rumaceId}" Je reçois l'URI finale, par exemple, API a été touché pour rocksetide = 23 , l'URI que je reçois de demande.getreQuesturi () est "q / v1 / règles / 23" mais ce que je veux, c'est uri = "q / v1 / règles / {rumaceId}" , Y a-t-il une méthode pour obtenir le résultat attendu, je sais, je peux toujours obtenir le résultat souhaité par une manipulation, mais je veux faire les choses génériques, s'il vous plaît aider

J'ai le contrôleur contenant API xxx

filtre xxx


7 commentaires

Je doute que vous puissiez l'obtenir dans le filtre à travers une API. Vous pouvez pré-numériser toutes les annotations @RequestMapping, le garder, puis dans le filtre correspond au motif.


Bonjour ADITYA, Votre exigence est-elle destinée aux statistiques / métriques ou d'autres opérations que vous souhaitez effectuer


@Patelromil, oui dans le filtre J'enregistre l'heure d'exécution de l'API et le nombre d'API d'API, puis poussez les statistiques à l'aide de STATSD, le problème de base est celui-ci avec chaque valeur de la variable de chemin {RIGSEID}, il fait une nouvelle métrique, inutile, inutile, c'est pourquoi je veux l'URI des modèles


@Adityakrishnanamdeo Peut-être que vous avez déjà eu la réponse, mais pour les statistiques de comptage et de l'heure, vous pouvez utiliser Administrateur de démarrage si vous souhaitez faire le moi savoir


@ Patelromil Lorsque j'utilisais l'actionneur à ressort pour collecter des métriques, l'actionneur fournit des métriques HTTP par défaut pour mesurer le temps et le compte, mais dans le cas de STATSD, je ne trouve pas cette fonctionnalité, si cette fonctionnalité existe comme vous le souhaitez, faites-le-moi savoir s'il vous plaît.


@AdityakrishnanamDeo Oui L'actionneur de printemps peut collecter du temps, compter avec l'administrateur de démarrage de printemps, vous pouvez le voir facilement dans GUI. Je vais répondre cela sous peu


Bonjour @adityakrishnanamdeo Je vais regarder la réponse. Vous pouvez vous concentrer sur l'administrateur de démarrage du printemps


5 Réponses :


0
votes

Je doute que vous puissiez l'obtenir dans le filtre à travers une API existante. Cependant, vous pouvez pré-numériser toutes les annotations @RequestMapping, le garder, puis dans le filtre correspond au motif pour obtenir le résultat souhaité.


0 commentaires

2
votes

Vous ne pouvez pas le faire dans un filtre puisque le filtre est exécuté avant le gestionnaire.

Vous pouvez implémenter un intercepteur de manutention et obtenir le mappage de chemin comme ci-dessous P>

public class LogInterceptor implements HandlerInterceptor {

     @Override
      public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
          String path = (String)request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
          System.out.println("path : " + path);
        return true;
      }
}


0 commentaires

0
votes

Spring Boot Admin - Facile à utiliser avec GUI

Un autre moyen est d'utiliser Spring Boot Admin Admin em> strong>. Pour cela, nous devons configurer le serveur client. Pour éviter l'erreur, assurez-vous que la version de la dépendance client-serveur est la même. Nous pouvons ajouter la métrique requise de la liste déroulante comme indiqué dans les images. p>

Vous pouvez compter, total_time pour URI: / utilisateur / getemployee / {employéId} comme 3, 0.2264027 em> p>

côté client: h2> pom.xml em> p> xxx pré>

application.properties em> p> xxx pré> côté serveur: h2>

application.properties em> p> xxx pré>

pom.xml em> p > xxx pré>

ajouter @enableadminServer code> p> xxx pré>

gui em> http: // localhost: 6699 / # / applications em> strong> strong> Entrez la description de l'image ici P>


Approche par programme H2>

Si vous souhaitez y parvenir si vous souhaitez y parvenir de manière programmatique. Je donne un indice ici Vous trouverez peut-être Tous les détails ici strong> p>

{
    "name": "http.server.requests",
    "description": null,
    "baseUnit": "seconds",
    "measurements": [
        {
            "statistic": "COUNT",
            "value": 3
        },
        {
            "statistic": "TOTAL_TIME",
            "value": 0.21817219999999998
        },
        {
            "statistic": "MAX",
            "value": 0.1379249
        }
    ],
    "availableTags": [
        {
            "tag": "exception",
            "values": [
                "MethodArgumentTypeMismatchException",
                "None"
            ]
        },
        {
            "tag": "method",
            "values": [
                "GET"
            ]
        },
        {
            "tag": "uri",
            "values": [
                "/{id}.*",
                "/user/asset/getAsset/{assetId}",
                "/user/asset/getAllAssets"
            ]
        },
        {
            "tag": "outcome",
            "values": [
                "CLIENT_ERROR",
                "SUCCESS"
            ]
        },
        {
            "tag": "status",
            "values": [
                "400",
                "404",
                "200"
            ]
        }
    ]
}


0 commentaires

1
votes

Est-ce que ce xxx

Vous devez d'abord faire l'appel à l'appel à demandeur.getatTribute car cet attribut n'est pas défini avant plus tard dans le cycle de vie de la demande. < / p>


0 commentaires

1
votes

Vous pouvez essayer ceci:

String path = (String)request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);


0 commentaires