响应变压器异常

时间:2016-07-21 15:26:22

标签: siesta-swift

通过我正在使用的服务,大多数响应都是XML格式,但有些是纯文本。设置它的最佳方法是什么?

目前我有这个:

// Root should return plain text, don't try to transform it
configureTransformer("/") { (content: String, entity) -> String? in
  return content
}
// Most data is XML
configureTransformer("**") { (content: NSData, entity) -> NSXMLDocument? in
  return try? NSXMLDocument(data: content, options: 0)
}
configureTransformer("**/properties/*") {
  (content: NSData, entity) -> String? in
  return String(data: content, encoding: NSUTF8StringEncoding)
}

..但是当我查询根URL时,这将是纯文本,我收到一个错误,因为NSData - >无法应用NSXMLDocument转换器。

编辑:当内容类型为application / xml时,我真正想要的是应用XML转换器。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

根据我在Service.init()中看到的内容,我做到了这一点,而且效果很好:

func XMLResponseTransformer(
    transformErrors: Bool = true) -> Siesta.ResponseTransformer
{
  return Siesta.ResponseContentTransformer(transformErrors: transformErrors) {
    (content: NSData, entity: Siesta.Entity) throws -> NSXMLDocument in
    return try NSXMLDocument(data: content, options: 0)
  }
}

configure(description: "xml") {
  $0.config.pipeline[.parsing].add(XMLResponseTransformer(),
                                   contentTypes: [ "*/xml" ])
}