您好我正在使用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,如果是这样的话?
答案 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
}
}