springMVC接受表单参数(嵌套类型)

时间:2022-07-05 15:40:23
项目规定发送的 请求一般都是这样的(所有请求都有request,和data),比如登录请求 

{
   "request" : "login"
   "data":{
      "username":"xxxx",
      "password":"xxx",
   }
}

所以我的实体类是 这样设计的,
有一个ReqBaseEntity.java

  protected String request;
 protected object data;
//省略getter setter

所有的ReqXXX.java 继承ReqBaseEntity.java比如

 public class ReqUser extends ReqBaseEntity{
    //里面重写 getData和setData
   public User getData(){
      return (User)data;
   }
   //setter略去
}

User.java略去(定义了username password等)
前端用ajax发送请求
问题来了:
1. 当以json形式传的时候即 contentType:application/json时
后台 接受 用 @requestbody ReqUser reqUser 接收 是能接受到的,而且自动给你把data里面的内容注入 user对象中
但是现在要求的是 必须以form表单形式提交于是
2.当以form表单提交时,即contentType:application/x-www-form-urlencoded时
后台用 ReqUser requser接受的话 无法接受到请求。
试了下 如果 发送{“username”:"xxx","password":"xxx"}然后后台用user去接受的话 是能接收的,所以我在想 是不是springMVC处理这种form表单提交的数据时 是不支持嵌套的?

当然,也可以直接从request中手动得到各个参数,然后手动注入实体类中,但是太麻烦。
所以想问下大家有没有什么好的解决方法?

3 个解决方案

#1


开始想的是在拦截器中 修改request的值
但是好像 request的 参数值 和 contenttype都不能修改
是不是在拦截器中重新构造个request,然后forward转发?这样如何呢?

#2


再用一个实体封装这个表单

#3


引用 2 楼 yang362046076 的回复:
再用一个实体封装这个表单


嗯,最后解决了,用form表单方式提交 的那种嵌套 
需要把上面那个 data定义成 map类型 就能接受到了

#1


开始想的是在拦截器中 修改request的值
但是好像 request的 参数值 和 contenttype都不能修改
是不是在拦截器中重新构造个request,然后forward转发?这样如何呢?

#2


再用一个实体封装这个表单

#3


引用 2 楼 yang362046076 的回复:
再用一个实体封装这个表单


嗯,最后解决了,用form表单方式提交 的那种嵌套 
需要把上面那个 data定义成 map类型 就能接受到了