木头人
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
评论