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
}
}
您好,我正在使用 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
}
}