嗨,我是Spring MVC的新手,嘗試一些簡單的例子。Spring mvc @PathVariable給出'客戶端發送的請求在語法上不正確。'
我在eclipse中使用archtype'spring-mvc-archtype'創建了一個新的Spring mvc maven項目。
我想打一個網址,並訪問使用@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
@geoffreydv沒有具體的原因,但我想嘗試一下,看看它是如何工作的。另外我覺得它很容易作爲一個概念和實現路徑變量的方式。謝謝 –
解決了它:好像我需要將4.3.9.RELEASE和spring-webmvc的spring-context和spring-test工件版本更新爲4.1.6.RELEASE。 更新版本後,它與上面的書面代碼工作正常。 謝謝。 :-) –