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

Spring Contract DLS中如何阻止字符串JSON被转为实际JSON?

Spring Cloud Contract: 避免字符串JSON被自动解析为JSON结构

问题分析

你碰到的这个问题是Spring Cloud Contract在序列化请求Body时,会自动把字符串形式的JSON(比如{})解析成JSON对象,导致生成的测试代码里没有将它作为字符串值包裹起来,不符合预期。

临时解决办法

在官方修复这个Bug之前,你可以通过以下两种临时方案绕过这个问题:

方案1:转义字符串中的引号

修改你的VALID_JSON_STRING定义,把目标JSON字符串包裹在转义的引号里:

VALID_JSON_STRING = '\"{}\"' 
[ Contract.make { 
    name("insertSomething_ShouldReturnHttp200") 
    description("POST should do sth") 
    request { 
        method 'POST' 
        url REQUEST_URL 
        body( value: VALID_JSON_STRING ) 
        headers { 
            contentType(applicationJson()) 
        } 
    } 
    response { 
        status 200 
        headers { 
            contentType(applicationJson()) 
        } 
    } 
} ]

方案2:在Body中构造带引号的字符串

如果不想修改常量定义,也可以直接在Body字段里通过GString构造带引号的目标值:

VALID_JSON_STRING = '{}' 
[ Contract.make { 
    name("insertSomething_ShouldReturnHttp200") 
    description("POST should do sth") 
    request { 
        method 'POST' 
        url REQUEST_URL 
        body( value: "\"${VALID_JSON_STRING}\"" ) 
        headers { 
            contentType(applicationJson()) 
        } 
    } 
    response { 
        status 200 
        headers { 
            contentType(applicationJson()) 
        } 
    } 
} ]

这两种方式都会让生成的测试代码里的Body变成你预期的.body("{\"value\":\"{}\"}");。

官方状态

编辑:该问题已被标记为Spring Cloud Contract的官方Bug,后续官方修复完成后就无需再使用这些临时方案了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:04:26