【发布时间】:2018-01-08 14:25:15
【问题描述】:
您好,我是 Spring MVC 的新手,正在尝试一些简单的示例。
我在 Eclipse 中使用 archtype 'spring-mvc-archtype' 创建了一个新的 Spring mvc maven 项目。
我正在尝试点击 url 并在 Map 中使用 @PathParam 访问 PathVariables
这是我的控制器类
@Controller
@RequestMapping(value="/greet")
public class HomeController {
@RequestMapping(value="/welcome/{countryName}/{userName}")
public ModelAndView test(@PathVariable("userName") String userName, @PathVariable("countryName") String countryName) throws IOException{
ModelAndView mav = new ModelAndView("home");
mav.addObject("mymessage", "Welcome To "+countryName+" , Spring MVC - "+userName);
return mav;
}
@RequestMapping(value="/hi/{cn}/{un}")
public ModelAndView hi(@PathVariable Map<String, String> pathVars){
String countryName = pathVars.get("cn");
String userName = pathVars.get("un");
ModelAndView mav = new ModelAndView("home");
mav.addObject("mymessage", "Hi "+userName+" in "+ countryName);
return mav;
}
}
这是配置类
@Configuration
@EnableWebMvc
@ComponentScan(basePackages="org.gyanbang.kiran.SpringMvc")
public class MvcConfiguration extends WebMvcConfigurerAdapter{
@Bean
public ViewResolver getViewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
}
所以当我运行它并点击 http://localhost:8080/SpringMvc/greet/welcome/India/user1 效果很好,我得到了想要的结果。
但在 http://localhost:8080/SpringMvc/greet/hi/India/user1 上,它会给出 400 错误消息 '客户端发送的请求语法错误。'
我尝试了几个选项,还尝试将 spring-webmvc 版本更改为 4.1.6.RELEASE 但在这种情况下它给了我 404。
任何帮助都会很棒。 提前致谢。
【问题讨论】:
-
您是否有特定原因希望将变量作为地图?
-
@geoffreydv 没有具体原因,但我想尝试一下,看看它是如何工作的。除此之外,我发现它作为一个概念和实现路径变量的方式很容易。谢谢
-
已解决:嗯,看来我需要将 spring-context 和 spring-test 工件版本更新为 4.3.9.RELEASE 和 spring-webmvc 为 4.1.6.RELEASE。更新版本后,上面编写的代码可以正常工作。谢谢。 :-)
标签: java spring maven spring-mvc path-variables