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



最近浏览
