2017-08-01 22 views
3

こんにちは、私はSpring MVCには新しく、いくつかの簡単な例を試しています。春のmvc @PathVariableは、 'クライアントが送信したリクエストは構文的に正しくありませんでした。

私は、spring-mvc-archtypeというarchtypeを使用してEclipseで新しいSpring mvc mavenプロジェクトを作成しました。

私はここで文字列>

は私のコントローラクラスが

@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クラス

で、URLをヒットし、地図 <文字列で@PathParamを使用してPathVariablesにアクセスしようとしています
@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が表示されます。

助けがあれば助かります。 ありがとうございます。

+0

変数をマップにする特別な理由はありますか? – geoffreydv

+0

@geoffreydv特別な理由はありませんが、私はそれを試して、どのように動作するかを見たいと思います。また、パス変数を実装するコンセプトと方法としては簡単です。ありがとう –

+0

解決済み:まあ、私は、スプリングコンテキストとスプリングテストのアーティファクトバージョンを4.3.9.RELEASEとspring-webmvcを4.1.6.RELEASEとして更新する必要があるようです。 バージョンを更新した後、上記のコードで正常に動作しています。 ありがとうございます。 :-) –

答えて

1

@PathVariableMap<String,String>を使用できます。<mvc:annotation-driven/>ApplicationContaxt.xmlにする必要があります。以下のコードを見つけることができます:

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> 

<mvc:annotation-driven/> 
1

私は本当にあなたのソリューションがうまくいかないのか本当に疑問に思っていました。

マップに収集されたパス変数をチェックしました。正しく動作します。あなたの問題はディスパッチャーサーブレットで起こったと思います。いくつかの既存のソリューションを検索するか、検索することができます。私はスプリングボックスからソリューションを使用することを提案します。

私の解決方法をgitで確認してください。 build.gradleファイル

dependencies { 
    classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
} 

...

dependencies { 
    compile("org.springframework.boot:spring-boot-starter-thymeleaf") 
    runtime('org.springframework.boot:spring-boot-devtools') 
} 

Link to my git project solution

あり、あなたのコードのいくつかの行があるので、あなたのために明確にする必要があり上の注意を払ってください。しかし、何かが明確でない場合は、躊躇しないでコメントしてください。

関連する問題