有点晚了,我认为这不是最干净的,但我希望它有所帮助。
需要用您自己的 JSON 解析器替换“EncoderRegistry”。
RESTClient restClient = new RESTClient( "http://myrest.com")
EncoderRegistry encoderRegistry = restClient.getEncoder();
encoderRegistry.putAt(groovyx.net.http.ContentType.JSON, {it ->
def builder = new groovy.json.JsonBuilder();
builder.content = it
ByteArrayInputStream dataStreamed = new ByteArrayInputStream(builder.toString().getBytes(StandardCharsets.UTF_8))
InputStreamEntity res = new InputStreamEntity(dataStreamed);
res.setContentType(groovyx.net.http.ContentType.JSON.toString())
res;
})
使用 JsonBuilder 而不是其余客户端的默认值,它使用标准格式发送日期:yyyy-MM-ddTHH:mm:ss+.sTZD
那么你就可以照常使用restClient了:
def response = restClient.post(
path: path,
headers: ["User-Agent": "UserAgent"],
query: query,
body: body,
requestContentType: groovyx.net.http.ContentType.JSON
)
顺便说一句,如果要替换解析器,则需要替换“ParserRegistry”
ParserRegistry parserRegistry = restClient.getParser()
parserRegistry.putAt(groovyx.net.http.ContentType.JSON,{HttpResponseDecorator resp ->
def obj = null
if (resp.status ==200){
if(clazz != null){
String jsonString = IOUtils.toString(resp.getEntity().getContent(), "UTF-8");
obj = new ObjectMapper().readValue(jsonString,new TypeReference<MyObject>(){});
}
return obj
}else{
throw new Exception("No found")
}
})