[英]Spring MVC very confused about controller mappings
使用基于注释的控制器映射。
@Controller
public class AlertsController {
@RequestMapping(value="create", method=RequestMethod.GET)
public void create(HttpServletRequest request, Model model) {
}
}
当访问alerts/create
,我收到消息Does your handler implement a supported interface like Controller?
。 这看起来很奇怪,与文档所说的相反。
所以,我在类中添加了一个RequestMapping
:
@Controller
@RequestMapping("/alerts")
public class AlertsController {
@RequestMapping(value="create", method=RequestMethod.GET)
public void create(HttpServletRequest request, Model model) {
}
}
这样就可以了。 我不应该需要@RequestMapping
,但我确实如此。 现在,事情变得奇怪了。 我真的想把它映射到`/ profile / alerts',所以我把它改成这个:
@Controller
@RequestMapping("/profile/alerts")
public class AlertsController {
@RequestMapping(value="create", method=RequestMethod.GET)
public void create(HttpServletRequest request, Model model) {
}
}
我在进行profile/alerts/create
时得到404,但由于某种原因它仍然映射到/alerts/create
?!?!?!
我把它改为:
@Controller
@RequestMapping("foobar")
public class AlertsController {
@RequestMapping(value="create", method=RequestMethod.GET)
public void create(HttpServletRequest request, Model model) {
}
}
这很奇怪,非常不方便。 任何人都有办法解决这个问题,甚至调试正在发生的事情?
在你的第一个片段中,你错过了领先/
。 它应该像@RequestMapping(value="/create", method=RequestMethod.GET)
现在你应该把你的第三个片段改成这个,
@Controller
public class AlertsController {
@RequestMapping(value="/profile/alerts/create", method=RequestMethod.GET)
public void create(HttpServletRequest request, Model model) {
}
}
此外,当您使方法void
,期望DispatcherServlet回退到默认视图名称“profile / alerts / create”。 然后将它与合适的视图解析器结合使用。 例如,
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
那里有404,可能是。
您可以对类注释进行URL匹配,也可以对方法进行更精细的匹配。 类级别注释前置于方法级别注释
@Controller
@RequestMapping(value = "/admin")
public class AdminController {
@RequestMapping(value = "/users", method = RequestMethod.GET)
/* matches on /admin/users */
public string users() { ... }
}
它非常接近你原来的第三个片段,除非你忘了领先/。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.