java - Spring无法将MultiValueMap映射到bean

标签 java spring spring-mvc spring-boot

将 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>

最佳答案

我在这里看到两个问题。

  1. 使用@RequestBody注释。它,或者更准确地说,它的处理程序(HttpMessageConverter 的子类)无法处理这些情况。您应该改为处理 @ModelAttribute

  2. 缺少二传手。如果没有 setter,Spring 无法将传入的值设置到目标实例。我不知道是否有一个属性可以直接操作字段,但我建议避免这样做。将字段设为私有(private)

关于java - Spring无法将MultiValueMap映射到bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45152558/

相关文章:

java - 如何使用 samba 客户端创建目录

java - 如何使用 JAXB 解析嵌套节点中的属性?

java - 在内部服务中捕获 AccessDeniedException 时防止事务回滚

java - Spring + Hibernate 异常映射

java - 如何通过 Spring MockMvc 将日期对象作为请求参数传递

java - 使用 entityManager 从数据库中获取列表

java - HibernateDaoSupport ,事务不回滚

java - 如何调用监听器以检查树选择对话框

java - Mockito when().thenReturn 不起作用

java - Tomcat启动时的触发函数