You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从HttpBuilder迁移至HttpBuilder-NG:获取原始JSON及Jackson解析方案

解决HttpBuilder-NG获取原始JSON并通过Jackson解析为POJO的问题

我最近刚把旧HttpBuilder脚本迁移到HttpBuilder-NG 1.0.3,遇到了和你一模一样的问题:框架默认会把JSON响应自动解析成LazyMap,没法直接拿到原始JSON字符串用Jackson转成POJO。试了各种方法后,终于通过自定义响应解析器搞定了,下面是完整的可运行实现代码:

完整工作代码

import groovyx.net.http.HttpBuilder
import com.fasterxml.jackson.databind.ObjectMapper

// 初始化HttpBuilder-NG基础配置
def http = HttpBuilder.configure {
    request.uri = "http://${proxy}.domain.ie"
    request.headers["Accept"] = "application/json"
    request.headers["Cookie"] = "token=${token}"
}

// 发送GET请求并处理响应
def queues = http.get {
    request.uri.path = "/blah/plugins/blah/queues"
    
    // 自定义application/json响应解析器,获取原始JSON字符串
    response.parser('application/json') { cfg, fs ->
        // 直接从输入流读取未解析的原始文本
        return fs.inputStream.text
    }
    
    response.success { fs, String rawJson ->
        LOGGER.info("GET queues request succeeded, HTTP ${fs.statusCode}")
        // 用Jackson将原始JSON解析为目标POJO数组
        ObjectMapper objectMapper = new ObjectMapper()
        return objectMapper.readValue(rawJson, Queue[].class)
    }
    
    response.failure { fs ->
        LOGGER.info("GET queues request failed, HTTP ${fs.statusCode}")
        return null
    }
}

关键细节说明

  • 移除了旧代码里的request.contentType = TEXT配置,因为我们要完全接管JSON的解析逻辑,不需要框架默认的文本处理流程
  • 核心是response.parser('application/json')这个自定义解析器,它直接从FromServer对象的输入流中读取原始JSON文本,彻底绕过了框架默认的LazyMap自动解析
  • 在response.success回调中,我们拿到的已经是纯净的原始JSON字符串,直接传给Jackson的ObjectMapper就能生成对应的Queue对象数组了

这个方案完全符合HttpBuilder-NG的官方规范,亲测在1.0.3版本中可以稳定运行。

内容的提问来源于stack exchange,提问作者alexnanrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:47:47