Groovy HTTP Builder:捕获无效的格式化JSON响应

时间:2016-08-11 14:34:48

标签: json groovy httpbuilder

您好我正在使用Groovy HTTPBuilder进行类似这样的POST调用:

   http.request( POST, JSON ) { req ->
        body = [name:'testName', title:'testTitle']
         response.success = { resp, json ->
            println resp.statusLine
            println json
        }
    }

但是由于一个Bug(我自己无法解决),REST服务器返回一个格式不正确的JSON,当我的应用程序试图解析它时导致以下异常:

groovy.json.JsonException:无法确定当前字符,它不是字符串,数字,数组或对象

我对groovy闭包和HTTPBuilder相当新,但是否有办法让应用程序在解析之前检查JSON是否实际有效并返回null,如果是这样的话?

1 个答案:

答案 0 :(得分:1)

我不确定这是个好主意,但是可以提供自己的JSON解析器,这有利于原始请求。如果已知错误可以修复,它还提供“修复”JSON的机会。

以下示例。解析器与HTTPBuilder uses的代码基本相同,但UTF-8的硬编码字符集除外。

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7' )

import groovy.json.*

import groovyx.net.http.*
import static groovyx.net.http.Method.*
import static groovyx.net.http.ContentType.*

def url = "http://localhost:5150/foobar/bogus.json"

def http = new HTTPBuilder(url)

http.parser."application/json" = { resp ->
    println "tracer: custom parser"
    def text = new InputStreamReader( resp.getEntity().getContent(), "UTF-8");
    def result = null
    try {
        result = new JsonSlurper().parse(text)
    } catch (Exception ex) {
        // one could potentially try to "fix" the JSON here if
        // there is a known bug in the server
        println "warn: custom parser caught exception"
    }

    return result
}

http.request( POST, JSON ) { req ->
    body = [name:'testName', title:'testTitle']
     response.success = { resp, json ->
        println resp.statusLine
        println json
    }
}