2017-07-17 13 views
1

x-www-form-urlencodeデータをSpringに送信します。 この作品:SpringはMultiValueMapをBeanにマップすることができません

@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) 
    public void sumbitFUD(@RequestBody final MultiValueMap<String, String> formVars) { 
} 

この一方、例外を与える:

コンテンツタイプ 'アプリケーション/ x-www-form-urlencodedで;のcharset = UTF-8' は

をサポートしていません
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) 
    public void sumbitFUD(@RequestBody Fud fud) { 
} 

そして、これは豆ビーイングのヌル上のすべてのフィールドでの結果:

@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) 
    public void sumbitFUD(Fud fud) { 
    //not using @RequestBody 
} 

FUD:

public class Fud { 

    public String token_id; 
    public String team_doamin; 
    public String channel_id; 
    public String user_id; 
    public String user_name; 
    public String command; 
    public String text; 
    public String response; 
} 

フォームデータ:

token%abc=&team_id%3DT0001=&team_domain%3Dexample=&channel_id%3DC2147483705=&channel_name%3Dtest=&user_id%3DU2147483697=&user_name%3DSteve=&command%3D%2Fweather=&text%3D94070=&response_url%3Dhttps=%2F%2Fhooks.slack.com%2Fcommands%2F1234%2F5678 

POM:

<dependencies> 
     <dependency> 
      <groupId>net.gpedro.integrations.slack</groupId> 
      <artifactId>slack-webhook</artifactId> 
      <version>1.3.0</version> 
     </dependency> 
     <!-- Spring Frameworks for Web, MVC and Mongo --> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.httpcomponents</groupId> 
      <artifactId>httpclient</artifactId> 
      <scope>test</scope> 
     </dependency> 

     <!-- JUnit --> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.11</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 
+0

回答を追加しました。あなたはそれを確認できますか? – Andrew

答えて

2

私はここに二つの問題を参照してください。

  1. @RequestBody注釈の使用。より正確には、HttpMessageConverterのサブクラスであるハンドラは、これらのケースを処理できません。代わりに@ModelAttributeを処理する必要があります。

  2. セッターがない。 Springは、セッターのないターゲットインスタンスに値を設定することはできません。私はフィールドと直接操作する財産があるかどうかわかりませんが、それを避けることをお勧めします。フィールドをprivateにします。

+0

試してもうまくいかなかった。 Fudのフィールドをプライベートにし、getterとsetterを追加し、コントローラーのシグニチャを '' @RequestMapping(メソッド= RequestMethod.POST、consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)に変更しました public void sumbitFUD(@ModelAttribute Fud request) '' ' Fudのフィールドまだヌルです – AfterWorkGuinness

関連する問題