{
"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转发?这样如何呢?
但是好像 request的 参数值 和 contenttype都不能修改
是不是在拦截器中重新构造个request,然后forward转发?这样如何呢?
#2
再用一个实体封装这个表单
#3
嗯,最后解决了,用form表单方式提交 的那种嵌套
需要把上面那个 data定义成 map类型 就能接受到了
#1
开始想的是在拦截器中 修改request的值
但是好像 request的 参数值 和 contenttype都不能修改
是不是在拦截器中重新构造个request,然后forward转发?这样如何呢?
但是好像 request的 参数值 和 contenttype都不能修改
是不是在拦截器中重新构造个request,然后forward转发?这样如何呢?
#2
再用一个实体封装这个表单
#3
嗯,最后解决了,用form表单方式提交 的那种嵌套
需要把上面那个 data定义成 map类型 就能接受到了