将 x-www-form-urlencode 数据发布到 Spring。 这有效:
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public void sumbitFUD(@RequestBody final MultiValueMap<String, String> formVars) {
}
另一方面,这给出了一个异常(exception):
Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public void sumbitFUD(@RequestBody Fud fud) {
}
这会导致 bean 上的所有字段都为空:
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public void sumbitFUD(Fud fud) {
//not using @RequestBody
}
恐惧:
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>
最佳答案
我在这里看到两个问题。
使用
@RequestBody
注释。它,或者更准确地说,它的处理程序(HttpMessageConverter
的子类)无法处理这些情况。您应该改为处理@ModelAttribute
。缺少二传手。如果没有 setter,Spring 无法将传入的值设置到目标实例。我不知道是否有一个属性可以直接操作字段,但我建议避免这样做。将字段设为
私有(private)
。
关于java - Spring无法将MultiValueMap映射到bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45152558/