$http、$resource序列化参数

前阵子因为项目需要,要将发送给后台的数据以formdata的数据形式发送给后台,查阅了很多资料找到了解决办法,跟大家分享一下。另外介绍一下$httpParamSerializerJQLike将数据格式化遵循jquery序列化规范的数据。


主要利用transformRequest对数据进行序列化,要注意一定要将Content-Type设置为undefined,这样浏览器才会自动帮你设置formdata的分隔符,自己设置会出错。有更好的解决办法也可在下面评论。

//http请求都在这里配置,put和delete是用resource插件,除了get,其他请求都默认用formdata的形式发送,可以在transformRequest重新定义处理函数
app.service('myHttp',['$http','$resource'
    ,function ($http,$resource) {
    //将参数序列化为formdata
    //注意formdata发送数据要求一定要将'Content-Type',设置为undefined,如headers:{'Content-Type':undefined}
     var setFormdata=function (data) {
         var myform=new FormData();
         //类型判断
         if(typeof data=="object") {
             angular.forEach(data, function (v, k) {
                 if(typeof v!="object"){
                     //不是对象就直接加入到formData
                     myform.append(k, v);//(参数名,参数值)
                 }else{
                     //如果是对象需将对象转换成字符串格式,多用于数组对象
                     myform.append(k, angular.toJson(v));
                 }
             });
         }
         return myform;
     };
  //下面使用setFormdata发送数据

        var httpR=$resource('/v1/admin/:mytype/:id', {mytype:'@mytype',id:'@id'}, {
            remove: { method: "DELETE",headers:{'Content-Type':undefined},transformRequest:function (data) {
                return setFormdata(data);
            }},
            update: { method: "PUT",headers:{'Content-Type':undefined},transformRequest:function (data) {
                return setFormdata(data);
            }}

        });

        /*post请求*/
        self.httpPost=function (obj) {
            def.config={
                headers: {
                    'Content-Type': undefined
                },
                transformRequest: function (data) {
                    return setFormdata(data);
                }
            };
            obj=angular.extend(def,obj);
            $http.post(obj.url,obj.data,obj.config).success(function (data) {
                console.log(data);
            }).error(function (data) {
                console.log(data,obj);
            });
        };
        self.resUpdate=function (obj) {
            httpR.update(obj.data,obj.config,function (data) {
                console.log(data);
            },function (data) {
                console.log(data,obj);
            })
        };
        self.resDelete=function (obj) {
            httpR.remove(obj.data,obj.config,function (data) {
                console.log(data);
            },function (data) {
                console.log(data,obj);
            });
        };

    }]);
上面介绍序列化为formdata,下面介绍另外一个序列化服务‘$httpParamSerializerJQLike’,该服务支持angular1.4.0以上。

$httpParamSerializerJQLike能将http发送的数据序列化成遵循jquery序列化规范的格式。使用起来很简单。

transformRequest: function (data) {
    var newdata = $httpParamSerializerJQLike(data);
    return newdata
}
有好的建议和意见欢迎大家在评论区留下评论。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jedis提供了多种序列化器,可以通过配置来选择使用不同的序列化器。下面以使用Jackson序列化器为例,介绍如何在Jedis中使用指定的序列化器: 1. 添加依赖,包括jedis和jackson-databind: ``` <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.6.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.4</version> </dependency> ``` 2. 创建JedisPoolConfig对象,设置Jedis连接池的相关参数: ``` JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(100); poolConfig.setMaxIdle(20); poolConfig.setMinIdle(10); ``` 3. 创建JedisPool对象,并设置Jackson序列化器: ``` JedisPool jedisPool = new JedisPool(poolConfig, "localhost", 6379); ObjectMapper objectMapper = new ObjectMapper(); Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); jedisPool.getResource().getClient().setSerializer(jackson2JsonRedisSerializer); ``` 这里使用了Jackson2JsonRedisSerializer作为Jedis的序列化器,并将ObjectMapper对象设置为其内部使用的ObjectMapper。这里还需要使用JedisPool的getResource方法获取Jedis实例,并使用getClient方法获取Jedis的客户端对象,然后调用setSerializer方法设置序列化器。 4. 使用Jedis实例操作Redis: ``` Jedis jedis = jedisPool.getResource(); String key = "myKey"; MyObject myObject = new MyObject(); byte[] bytes = jackson2JsonRedisSerializer.serialize(myObject); jedis.set(key.getBytes(), bytes); byte[] result = jedis.get(key.getBytes()); MyObject myObjectResult = (MyObject) jackson2JsonRedisSerializer.deserialize(result); ``` 这里使用了Jedis实例来进行Redis的操作,其中包括将一个Java对象序列化为JSON格式,并存储到Redis中,以及从Redis中获取数据,并将其反序列化为Java对象。需要注意的是,在序列化和反序列化时,使用了之前创建的Jackson2JsonRedisSerializer对象来处理数据。 通过以上步骤,我们就可以在Jedis中使用指定的序列化器来进行数据的序列化和反序列化了。需要根据实际情况选择合适的序列化器,并进行相应的配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值