1.声明
当前内容主要用于复习和学习,解析当前angularjs的post请求数据问题
2.查看前台angularjs传递的post数据
可以发现传递的数据为{key=value,...}
,这种方式传递的数据,如果后台直接使用对象接收就会出现传递了null数据的问题!
3. 解决办法
1.不使用对象接收,使用Map集合接收,并添加@RequestBody这个可以解决,那么传递的数据会自动写入到map集合中
@RequestMapping(value ="/insertUserSelective")
public int insertUserSelective(@RequestBody Map<String, String> params) {
User user = EasyBeanUtils.setObjectValues(User.class, params);
System.out.println(user);
return userService.insertSelective(user);
}
然后可以使用BeanUtils的库的方法实现创建对象时注入属性值:
/**
* Created by admin on 2019/11/8.
* 主要用于简化bean的参数注入的操作
*/
public abstract class EasyBeanUtils {
/*用于创建对象并向当前的对象的字段中填充数据*/
public static <T> T setObjectValues( final Class<T> clazz,final Map<String, String> params) {
/*判断当前的类是否为空*/
if (clazz == null) {
throw new IllegalArgumentException("当前传递的clazz不能为null");
}
/*判断传递的类是否为接口*/
if(clazz.isInterface()){
throw new IllegalArgumentException("当前传入的类不能是接口");
}
try {
/*默认调用无参的构造函数*/
final T t = clazz.newInstance();
/*注入字段内容*/
setObjectValues(t,params);
return t;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/*设置对象的值*/
public static void setObjectValues( final Object o,final Map<String, String> params) throws InvocationTargetException, IllegalAccessException {
BeanUtils.populate(o, params);
}
}
此时的结果为:
写入成功,发现这个angularjs和后台传递的数据和vue的axios一致,所以解决传递数据问题可以参考这篇:Vue传递数组数据到后台的解析办法
4.总结
- 传递{…}这个格式的数据需要手动使用@RequestBody注解然后使用Map接收,如果出现解析为数组的字符串,需要fastjson来转换json数组为对象
- angularjs的使用方式基本和vue的差不多