Comment déboguer Spring MVC mappage d'url?
Je suis à l'aide de Spring MVC 3 et je rencontre un problème avec un mappage d'URL. J'ai une méthode
@Controller
public class DocumentController {
@RequestMapping( value="/docs/pupil/classes/{courseCategoryType}", method=RequestMethod.GET )
public ModelAndView listClassesForPupil( @PathVariable("courseCategoryType") final String courseCategoryType ){
System.err.print( "\n\n\n\t\t--- XXXXX ---\n\n\n" );
}
}
Je suis en train d'utiliser le Printemps URI syntaxe du modèle, et je sais que c'est mappée parce que dans la console je vois:
11:22:12,108 INFO DefaultAnnotationHandlerMapping:411 - Mapped URL path [/docs/pupil/classes/{courseCategoryType}] onto handler 'documentController'
11:22:12,108 INFO DefaultAnnotationHandlerMapping:411 - Mapped URL path [/docs/pupil/classes/{courseCategoryType}.*] onto handler 'documentController'
11:22:12,108 INFO DefaultAnnotationHandlerMapping:411 - Mapped URL path [/docs/pupil/classes/{courseCategoryType}/] onto handler 'documentController'
Cependant, lorsque j'entre l'URLhttps://localhost/docs/pupil/classes/ACADEMIC
dans le navigateur j'ai une erreur 404 et je ne vois pas tout ce qui est imprimé dans la console. J'ai remplacé le imprimer le code qui lance une exception, et il ne semble pas à l'obtenir jeté soit. Un collègue a suggéré qu'il devrait être une manière de voir comment la résolution d'URL est accompli, mais un Recherche Google ne semble pas pour rien.
Toutes les suggestions sur les façons de débogage?
- Vérification rapide: avez d'autres contrôleurs de travail? Êtes-vous sûr que ce n'est pas un problème avec le chemin de contexte,
DispatcherServlet
s'url-pattern, etc? - Les autres contrôleurs travaillé, et nous avons résolu cette question en particulier (je s'est avéré qu'il y avait de filtre pour le contrôleur frontal à ignorer tous, mais *.bf demandes), mais j'ai pensé que cette question serait encore utile parce que je voudrais être en mesure à la demande de débogage des problèmes de ce genre dans l'avenir.
Vous devez vous connecter pour publier un commentaire.
Pour ce type de problèmes, je me sens comme le meilleur "point d'entrée" pour démarrer le débogage est la méthode
getHandler(HttpServletRequest request)
de laDispatcherServlet
.À l'intérieur de cette méthode, chaque configuré
HandlerMapping
est inspecté si c'responsable du traitement de votre demande spécifique. Si votre demande fait-il à ce point, vous pouvez être tout à fait sûr que c'est un problème de configuration à l'intérieur du printemps contexte.Watch out pour les maîtres-chiens de type
RequestMappingHandlerMapping
(ouDefaultAnnotationHandlerMapping
, si vous utilisez une ancienne version de Printemps), ce sont normalement lesHandlerMapping
utilisé par l'annotation en fonction de configuration du Contrôleur.Dans les autres cas, assurez-vous il n'y a rien "en avant" de l'
DispatcherServlet
filtrage de vos demandes (comme dans votre cas)doDispatch(HttpServletRequest,HttpServletResponse)
comme le meilleur endroit pour commencer.Répondre, cela dépend de la structure de journalisation que vous utilisez.
Si vous définissez le niveau de journal pour
org.springframework.web
àDEBUG
ouTRACE
spring mvc va enregistrer des informations plus détaillées.Dans Printemps 4 et le Printemps de DÉMARRAGE - ce qui m'aide a activation de la journalisation du DÉBOGAGE de l'application.les propriétés. Pour ce faire, ajoutez simplement:
de journalisation.niveau.org.springframework.web=DEBUG
mise à jour
Pour le mode Debug dans le dernier Printemps de démarrage ajouter:
dans votre application.fichier de propriétés
Daniele Torino post m'a fait descendre le chemin d'accès correct en mentionnant TRACE dans plus de DÉBOGAGE. En plus de la structure de journalisation, je pense que c'est important la version de Printemps que vous utilisez. Au Printemps 3, qui nous a récemment déménagé de, je pense DEBUG en était assez. Toutefois, dans le Ressort 5, le mappages ne sont pas répertoriés. Je rappelle que (au Printemps 3.x) j'ai utilisé pour voir les mappages juste en mettant le
mais maintenant (dans le Ressort 5.x) qui n'affiche que le nombre de correspondances.
Dans le Ressort 5, le mappages n'étiez pas connecté jusqu'à ce que j'ai ajouté
pour le journal.fichier de propriétés. (Je recommande l'utilisation de la TRACE avec parcimonie.) Avec en place, la sortie du journal comprend plusieurs lignes comme:
Vous pouvez ajouter une ligne pour
CommonsRequestLoggingFilter
dans votre configuration de journalisation (log4j exemple ci-dessous):Il permet d'imprimer votre URI avant et après le traitement, comme ceci:
Il est très utile, bien qu'il ne montre pas les demandes de non-existants des ressources (comme l'404 que vous obtenez).
Une autre option pour obtenir tous les demandes, si vous êtes à l'aide de Spring Boot, est de Tomcat
access.log
. Vous pouvez l'activer dans votreapplication.properties
comme ceci:si vous hébergez sur un site en https sur un serveur apache qui est de la redirection vers le backend appContext est manquant. il doit être quelque chose comme
https://localhost:8443//docs/élèves/classes/UNIVERSITAIRE
Si vous utilisez le Printemps de Démarrage avec Actionneur, les mappages d'extrémité montrera rassemblées liste de tous les @RequestMapping chemins.
Voir http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html pour plus de détails sur les systèmes d'extrémité.
Voir https://spring.io/guides/gs/actuator-service/ pour le tutoriel comment inclure de l'Actionneur module. Pour Gradle, vous avez juste besoin
compile("org.springframework.boot:spring-boot-starter-actuator")
beans
point de terminaison est également utile. Il vous montrera tous les chargés de haricots. Raison Possible pour manque point de terminaison HTTP est le fait que les correspondants de haricot (cartographie) n'a pas été chargé (parce qu'il n'est pas sur componentScan chemin d'accès).je pense que vous pouvez regarder cela de Chrom console/panneau réseau ,de les comparer à l'url que vous configed
Votre URL(https://localhost/docs/pupil/classes/ACADEMIC) manque le appName il doit être l'URL(https://localhost/appName/docs/pupil/classes/ACADEMIC)