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 J'ai le contrôleur contenant API P > filtre p> requête.getrequesturi () code> mais dans le cas d'URI Les variables de chemin de temps permettent de dire uri = "q / v1 / règles / {rumaceId}" code>
Je reçois l'URI finale, par exemple, API a été touché pour rocksetide = 23 code>, l'URI que je reçois de demande.getreQuesturi () code> est
"q / v1 / règles / 23" code> mais ce que je veux, c'est uri = "q / v1 / règles / {rumaceId}" code>,
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 p>
5 Réponses :
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é. P>
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;
}
}
Un autre moyen est d'utiliser Vous pouvez compter, total_time pour URI: / utilisateur / getemployee / {employéId} comme 3, 0.2264027 em> p> application.properties em> p> application.properties em> p> pom.xml em> p > ajouter gui em> http: // localhost: 6699 / # / applications em> strong> strong>
Si vous souhaitez y parvenir si vous souhaitez y parvenir de manière programmatique. Je donne un indice ici Vous trouverez peut-être côté client: h2> pom.xml em> p>
@enableadminServer code> p>
P>
Approche par programme H2>
{
"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"
]
}
]
}
Est-ce que ce 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> p>
Vous pouvez essayer ceci:
String path = (String)request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
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