在Spring MVC中,如何映射嵌套的URL,例如/ settings /,/ settings / users /和/ settings / users / delete?
问题内容:
在Spring 3
MVC中,我有一个称为SettingsController的控制器,它具有诸如displayUsers()的方法来显示用户列表,saveUser()和deleteUser()。SettingsContoller还控制角色和其他内容。
我很希望能够使用URL路由,这样/ settings / users将调用displayUsers(),/ settings / users /
save将调用saveUser(),/ settings / users / delete将调用deleteUser()。
我的代码在下面,并且我收到代码后的错误消息。 我究竟做错了什么?谢谢!
@Controller
@RequestMapping("/settings")
public class SettingsController {
@Transactional
@RequestMapping(value = {"/users/save"}, method = {RequestMethod.POST})
public ModelAndView saveUser(details removed){
//details removed
}
@RequestMapping(value = {"/users/delete"}, method = {RequestMethod.POST})
public ModelAndView deleteUser(details removed){
//details removed
}
@RequestMapping(value = {"/users"}, method = RequestMethod.GET)
public ModelAndView settingsUsers(details removed){
//details removed
}
}
错误:
HTTP ERROR: 500
Could not resolve view with name 'settings/users/delete' in servlet with name 'spring'
RequestURI=/das-portal/srv/settings/users/delete
Caused by:
javax.servlet.ServletException: Could not resolve view with name 'settings/users/delete' in servlet with name 'spring'
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1029)
...
问题答案:
在我看来,您已经正确设置了控制器。正如您指出的那样,问题可能出在Spring在启动时如何解析批注。
您如何配置Sprint来解析诸如之类的注释@Controller
?您是否明确设置了某种HandlerMapping
?如果使用<context:component- scan>
,它将为您注册一个DefaultAnnotationHandlerMapping。
好消息是您可以将多个处理程序映射类链接在一起。该DispatcherServlet
会检查每一个在您通过指定的顺序处理程序映射豆的顺序属性(换句话说,使用order属性来表示你的处理程序的优先级)。
因此,<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
放入配置并适当设置其order属性。