木头人的gravatar头像
木头人 2017-12-08 19:17:06
springmvc对于传入多个对象参数遇到的问题

      要实现前台发送后台的是json数据,传入两个对象,根据springmvc的注解@RequestBody,注解每个参数,一个是taskVO,一个是pageVO。问题出现了,一直报404错误。查了一下资料发现,springmvc的@RequestBody注解是对整个请求体来说的。所以怎么办,一个笨方法是我建立一个类,这个类包含TaskVO和PageVO的所有属性。然后在后台获取数据后,在把对象数据拆分成两个对象。

       转载:也可以建立一个包装类Param,它有两个对象属性,TaskVO和PageVO。

下面是我在别处发现的两种写法都可以:

import com.alibaba.fastjson.JSON;

public class JsonXMLUtils {
    public static String obj2json(Object obj) throws Exception {
        return JSON.toJSONString(obj);
    }

    public static <T> T json2obj(String jsonStr, Class<T> clazz) throws Exception {
        return JSON.parseObject(jsonStr, clazz);
    }

    public static <T> Map<String, Object> json2map(String jsonStr)     throws Exception {
            return JSON.parseObject(jsonStr, Map.class);
    }
  
    public static <T> T map2obj(Map<?, ?> map, Class<T> clazz) throws Exception {
        return JSON.parseObject(JSON.toJSONString(map), clazz);
    }
}
@Controller
public class TestController{
  @RequestMapping("\test")
  @ResponseBody
  public Object test(@RequestBody Map<String, Object> models){
   User user=JsonXMLUtils.map2obj((Map<String, Object>)models.get("user"),User.class); 
   Address address=JsonXMLUtils.map2obj((Map<String, Object>)models.get("address"),Address.class); 
   return models; 
 }
}

这样的话必须传入的参数格式为:{user:{name:"test"},address:{location:"新华路"}}

也可以使用自定义注解实现json和对象的映射:https://www.cnblogs.com/wangjiuyong/p/7182650.html


打赏
最近浏览
xiaowei3632  LV1 2023年5月29日
随便取个名字_哈哈  LV27 2023年5月24日
zjn333 2022年4月27日
暂无贡献等级
420256987  LV1 2021年11月25日
清风lqz  LV8 2020年6月17日
李二sdfsd  LV1 2020年6月15日
a123456b  LV5 2020年4月17日
287077 2020年2月21日
暂无贡献等级
ccclll888  LV1 2019年10月25日
12555555  LV5 2019年10月9日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友