当前位置: 首页 > 知识库问答 >
问题:

Spring无法将MultiValueMap映射到bean

花飞扬
2023-03-14

将x-www-form-urlencode数据发布到Spring。这是有效的:

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

另一方面,这给出了一个例外:

不支持内容类型'application/x-www-form-urlencoded;charset=utf-8'

@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 
}

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>

共有1个答案

宇文金鑫
2023-03-14

我在这里看到了两个问题。

>

  • 使用@requestbody注释。它,或者更准确地说,它的处理程序--HttpMessageConverter的子类,不能处理这些情况。您应该处理@modelattribute

    二传手的缺席。Spring不能在没有setter的情况下为目标实例设置值。我不知道是否有一个属性可以直接与字段一起操作,但我建议避免这样做。使字段私有

  •  类似资料:
    • 我使用http://jsonlint.com来验证JSON是否有效。因此,我要么需要更改JSON或代码,要么可能两者都需要。有什么想法吗?

    • 我能够使用Json输出运行Jersey,并且能够在没有任何问题的情况下使用Json映射获得“get”请求。 我也有一些JSON方法,它们是“post”方法,它们映射到Java类,如下面的方法- 供您参考,我在这里或这里遵循指南 在给出一个有效的post请求时,它们都开始抛出下面的错误-

    • 我正在使用Spring boot starter项目与maving pluging,Spring boot不能知道我的HTML模板中的链接。这是我的控制器: 这是authentification.html: 下面是我的项目的层次结构快照: https://fbcdn-sphotos-f.a.akamaihd.net/hphotos-ak-xfp1/v/t1.0-9/11011221_8112660

    • 问题内容: 我已经通过ElasticSearch Sense浏览器插件创建了以下索引,并且还创建了C#Nest Fluent映射。我可以在nGrams过滤器上表达Nest中除“ token_chars”以外的所有内容。我没有在C#嵌套上获得强类型属性来添加“ token_chars”。有人遇到过同样的问题吗? json和c#设置如下所示。请帮忙 我没有在C#嵌套上获得强类型属性来添加“ token

    • 错误: 我希望在列表中映射相同的字段名,而不需要另一个单独的方法,就像在另一个项目中使用旧的版本时一样。

    • 例如,我有以下接口映射器: 在代码中,您可以看到映射和一些默认方法,其中包含其他映射。如何在Mapstruct映射中使用这些方法,以便Mapstruct使用这些方法在字段中填充值?