Sle*_*led 23 java spring spring-mvc
我正在使用Spring MVC 3,并且遇到了URL映射问题.我有一个方法
@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" );
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用Spring URI模板语法,我知道它已被映射,因为在控制台中我看到:
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'
Run Code Online (Sandbox Code Playgroud)
但是,当我https://localhost/docs/pupil/classes/ACADEMIC在浏览器中输入URL 时出现404错误,我在控制台中看不到任何打印出来的内容.我替换了抛出异常的打印输出代码,它似乎也没有被抛出.同事建议应该有一种方法来查看URL解析是如何完成的,但谷歌搜索似乎没有出现任何问题.
有关如何调试这个的任何建议?
Pat*_*ick 15
对于这样我觉得最好的"入口点"开始调试问题是方法getHandler(HttpServletRequest request)的DispatcherServlet.
在此方法中,HandlerMapping如果负责处理您的特定请求,则会检查每个已配置的内容.如果您的请求到目前为止,您可以确定它是spring上下文中的配置问题.
注意该类型的处理程序RequestMappingHandlerMapping(或者DefaultAnnotationHandlerMapping,如果您使用的是旧版本的Spring),这些通常HandlerMapping由基于注释的Controller配置使用.
在另一种情况下,请确保DispatcherServlet过滤您的请求没有"在前面" (如您的情况)
Daniele Torino的帖子通过提请DEBUG和DEBUG来使我走上正确的道路。除了日志框架之外,我认为使用哪个版本的Spring也很重要。在我们最近搬出的Spring 3中,我认为DEBUG就足够了。但是,在春季5中,没有列出实际的映射。我记得(在Spring 3.x中)我过去只是通过设置来查看映射
<logger name="org.springframework.web" level="DEBUG" />
Run Code Online (Sandbox Code Playgroud)
,但现在(在Spring 5.x中)仅列出映射数。
DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - 14 mappings in 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping'
Run Code Online (Sandbox Code Playgroud)
在春季5中,直到我添加了才记录实际的映射
<logger name="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" level="TRACE" />
Run Code Online (Sandbox Code Playgroud)
到log.properties文件。(我建议您谨慎使用TRACE。)在适当的位置上,日志输出包括几行,例如:
TRACE o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped 1 handler method(s) for class com.yourcompany.YourClass: {public org.springframework.web.servlet.ModelAndView com.yourcompany.YourClass.someMethod(<your parameters and models here>,javax.servlet.http.HttpServletRequest)={[/your-request-mapping-url],methods=[GET]}}
Run Code Online (Sandbox Code Playgroud)
在Spring 4和Spring BOOT中 -帮助我在application.properties中启用DEBUG日志记录的是什么。为此,只需添加:
logging.level.org.springframework.web =调试
更新
对于最新的Spring引导中的Debug模式,请添加:
debug=true
Run Code Online (Sandbox Code Playgroud)
到您的application.properties文件中
感谢 Bartosz Bilicki Actuator 的提示,这真的很好。我将以下配置添加到我的 application.yml 中。
management:
server:
port: 9001
address: 127.0.0.1
endpoints:
enabled-by-default: true
web:
exposure:
include: '*'
Run Code Online (Sandbox Code Playgroud)
然后我打开http://localhost:9001/actuator/mappings,仅此而已。
| 归档时间: |
|
| 查看次数: |
39085 次 |
| 最近记录: |