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

Groovy HTTP Builder: Catching invalid formatted JSON response

您好,我正在使用 Groovy HTTPBuilder 进行 POST 调用,类似于:

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

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

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

我对 groovy 闭包和 HTTPBuilder 还很陌生,但是 有没有办法让应用程序在解析并返回之前检查 JSON 是否真的有效如果是,则为空?

我不确定这是个好主意,但可以提供您自己的 JSON 解析器,这有助于原始请求。它还提供了 "fix" 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
    }
}