Spring:解析前台AngularJS的post请求的数据

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.总结

  1. 传递{…}这个格式的数据需要手动使用@RequestBody注解然后使用Map接收,如果出现解析为数组的字符串,需要fastjson来转换json数组为对象
  2. angularjs的使用方式基本和vue的差不多

猜你喜欢

转载自blog.csdn.net/weixin_45492007/article/details/113882980
今日推荐