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

SpringMVC:当请求内容类型为x-www-form-urlencoded时绑定嵌套的请求参数

萧升
2023-03-14

请求参数:

{
    "username": "aaa",
    "password": "bbb",
    "detail": {
        "gender": "ccc",
        "location": "ddd"
    }
}

我想使用以下方法在Spring MVC中获取请求参数:

@RequestMapping(value = "/test")
public String test(User user) {
    return user.toString();
}

User类定义如下:

@ToString
@NoArgsConstructor
@Data
public class User {
    private String username;
    private String password;
    private Detail detail;

    @Data
    @NoArgsConstructor
    public class Detail {
        private String gender;
        private String location;
    }
}

发送请求时,我收到错误信息:

bean类[com.example.demo.param.User]的无效属性“detail[gender]:非法获取属性“detail”引发异常;嵌套的异常是org。springframework。豆。NullValueInTestedPathException:bean类[com.example.demo.param.User]的属性“detail”无效:无法实例化属性类型[com.example.demo.param.User$detail]以自动增长嵌套属性路径;嵌套的异常是java。lang.NoSuchMethodException:com。实例演示。帕拉姆。用户$Detail。()

请求数据可以在Chrome开发工具中看到:

username: aaa
password: bbb
detail[gender]: ccc
detail[location]: ddd

似乎细节[性别]和细节[位置]不能被识别为细节的子属性

当我使用annotation@RequestBody接收内容类型为application/json的请求时,它工作得很好。

但是,在上述情况下,如何将请求参数作为用户对象获取?

共有1个答案

上官彬
2023-03-14

与您的对象结构的请求将在这两种情况下工作(选项1更好):

备选案文1:

username: aaa
password: bbb
detail.gender: ccc
detail.location: ddd

>

该请求必须传递如下与细节对象的工作:(注意对象的变量访问为detail.gender而不是细节[性别])

备选案文2:

  • 将您的详细信息作为贴图而不是复杂对象,以便详细信息[性别]映射到键值“性别”
 类似资料:
  • 这是我第一次决定用完整的Java代码配置编写基于Spring Boot和Spring Security性的应用程序,我遇到了无法超越的奇怪问题。我正在尝试用Postman测试API,我的请求只有在使用内容类型为application/x-www-form-urlencoded时才被接受。下面我粘贴我的所有当前配置。 如果我想登录,我只能使用提到的内容类型。对于应用程序/json,我得到403响应状

  • 我正在尝试为我的网站创建一个简单的登录功能。我使用JAVA作为后端,并尝试使用restservices。我的学校给了我一个带有身份验证的登录系统的例子。不幸的是,我遇到了这个错误:java。lang.IllegalStateException:当请求实体的内容类型不是application/x-www-form-urlencoded]时,使用@FormParam。

  • 我已经通过邮递员发送了标题Content-Type=Application/x-www-form-urlencoded的POST请求。 我得到了PHP中的数组,格式如下。我无法在PHP页面中访问。我该如何解决这个问题? 结果是

  • 当内容类型为application/x-www-form-urlencoded;charset=UTF-8并且请求正文为text或application/json时,如何在控制器中进行post映射。我读到@RequestBody不能与UrlenCoded一起工作。如何重新发行这个问题。

  • 我有一个api要求在标题中发送以下参数- 内容类型-应用程序/x-www. form-urlencoded AuthKey-(会话令牌) 以及正文中的以下参数(表单日,即键值对) storeId-1 类型-产品 类别ID-324 但是每当我点击这个api,我总是得到401(未授权)错误。我已经尝试使用MultipartRequest正文和formBody,我知道这与正文无关(它的头,我需要发送内容

  • 我正在使用OpenAPI生成器生成Spring REST API。下面是一个片段: 它生成一个Spring REST API方法(只是一个有趣的方法): 然后,我想使用从集成测试中调用它: 我得到一个错误: 我对服务器端进行了一点调试,看起来它需要一个多部分的内容,但我不明白为什么。 内容类型为application/x-www-form-urlencoded的Http Post请求在Spring