             completionHandler(true,responseSwiftyJSON)
         }
         
+        func validateResponse(request:URLRequest?, response:HTTPURLResponse, data:Data?) -> DataRequest.ValidationResult {
+            do {
+                let json = try SwiftyJSONResponseSerializer().serialize(request: request, response: response, data: data, error: nil)
+                let dataResponse = DataResponse<JSON, AFError>(request: request, response: response, data: data, metrics: nil, serializationDuration: 0, result: .success(json))
+                let validate = self.validateResponseWhenRequestSuccess(dataResponse.value)
+                guard let error = validate.1 else {
+                    return .success(Void())
+                }
+                if validate.0 {
+                    return .success(Void())
+                }
+                return .failure(error)
+            } catch let e {
+                return .failure(e)
+            }
+        }
+
         func responseSwiftyJSONFromRequest() {
-            self.request?.validate().responseSwiftyJSON(queue: self.responseQueue, options: self.responseJSONOptions, completionHandler: { swiftyJSONResponse in
-                var response = swiftyJSONResponse
-                switch response.result {
-                case .success(let obj):
-                    let validate = self.validateResponseWhenRequestSuccess(obj)
-                    if !validate.0 {
-                        response = generateValidateFailResponse(response, serverError: validate.1)
-                    }
-                case .failure(_):
-                    break
-                }
-                self.requestFilter(response, shouldSaveCache: true)
-                completionHandler(false,response)
-            })
-        }
-        
-        func generateValidateFailResponse(_ swiftyJSONResponse: DataResponse<JSON,AFError>, serverError: Error?) -> DataResponse<JSON,AFError> {
-            return DataResponse(request: swiftyJSONResponse.request, response: swiftyJSONResponse.response, data: swiftyJSONResponse.data, metrics: swiftyJSONResponse.metrics, serializationDuration: swiftyJSONResponse.serializationDuration, result: .failure(self.generateValidationFailureError(serverError)))
+            self.request?.validate({ (request:URLRequest?, response:HTTPURLResponse, data:Data?) -> DataRequest.ValidationResult in
+                validateResponse(request: request, response: response, data: data)
+            }).responseSwiftyJSON(queue: self.responseQueue, options: self.responseJSONOptions, completionHandler: { swiftyJSONResponse in
+                self.requestFilter(swiftyJSONResponse, shouldSaveCache: true)
+                completionHandler(false,swiftyJSONResponse)
+            })
         }
         
         switch responseDataSource {
         case .server:
-            self.request?.validate().responseSwiftyJSON(queue: self.responseQueue, options: self.responseJSONOptions, completionHandler: { swiftyJSONResponse in
-                var response = swiftyJSONResponse
-                switch response.result {
-                case .success(let obj):
-                    let validate = self.validateResponseWhenRequestSuccess(obj)
-                    if !validate.0 {
-                        response = generateValidateFailResponse(response, serverError: validate.1)
-                    }
-                case .failure(_):
-                    break
-                }
-                self.requestFilter(response)
-                completionHandler(false,response)
-            })
+            responseSwiftyJSONFromRequest()
         case .cacheIfPossible:
             self.responseSwiftyJSONFromCache(completionHandler: { (loadCacheData: () throws -> DataResponse<JSON,AFError>) in
                 do {

                    loadCache(responseString: cacheResponse)
                    let isSendRequest = customCacheRequest.shouldSendRequest(self, cacheResponse: cacheResponse)
                    if isSendRequest {
                        self.request?.validate().responseString(queue: self.responseQueue, encoding: self.responseStringEncoding, completionHandler: { stringResponse in
                            let isUpdateCache = customCacheRequest.shouldUpdateCache(self, response: stringResponse)
                            if isUpdateCache {
                                var response = stringResponse
                                switch response.result {
                                case .success(let obj):
                                    let validate = self.validateResponseWhenRequestSuccess(obj)
                                    if !validate.0 {
                                        response = generateValidateFailResponse(response, serverError: validate.1)
                                    }
                                case .failure(_):
                                    break
                                }
                                self.requestFilter(response, shouldSaveCache: true)
                                completionHandler(false,response)
                            }
                        })
                    }

                    loadCache(responseSwiftyJSON: cacheResponse)
                    let isSendRequest = customCacheRequest.shouldSendRequest(self, cacheResponse: cacheResponse)
                    if isSendRequest {
                        self.request?.validate({ (request:URLRequest?, response:HTTPURLResponse, data:Data?) -> DataRequest.ValidationResult in
                            validateResponse(request: request, response: response, data: data)
                        }).responseSwiftyJSON(queue: self.responseQueue, options: self.responseJSONOptions, completionHandler: { swiftyJSONResponse in
                            let isUpdateCache = customCacheRequest.shouldUpdateCache(self, response: swiftyJSONResponse)
                            if isUpdateCache {
                                self.requestFilter(swiftyJSONResponse,shouldSaveCache: true)
                                completionHandler(false,swiftyJSONResponse)
                            }
                        })
                    }
