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

Wiremock Standalone v3.4.0中Response Template处理JSON字符串报错求助

WireMock响应模板中JSON字符串值解析失败问题

环境

WireMock Standalone jar v3.4.0

当前Stub配置

{
  "id": "e6e2b5cf-52c1-3b0a-b368-3ea71e444fbf",
  "request": {
    "urlPathPattern": "/test",
    "method": "GET"
  },
  "response": {
    "status": 200,
    "jsonBody": {
      "data": [
        {
          "key1": "value",
          "nestedKey1": {
            "key2": "value2"
          },
          "jsonStringKey1": "{\"key\": \"value\", \"nestedKey\": {\"key2\": \"value2\"},}"
        }
      ]
    },
    "transformers": [
      "response-template"
    ]
  },
  "uuid": "e6e2b5cf-52c1-3b0a-b368-3ea71e444fbf"
}

问题描述

访问/test端点时出现500错误,原因是Handlebars模板引擎尝试解析jsonStringKey1的值时导致JSON解析失败,具体错误日志如下:

HTTP ERROR 500 com.github.tomakehurst.wiremock.common.JsonException: { "errors" : [ { "code" : 10, "source" : { }, "title" : "Error parsing JSON", "detail" : "Unexpected character ('k' (code 107)): was expecting comma to separate Object entries\n at [Source: (String)\"{\"data\":[{\"key1\":\"value\",\"nestedKey1\":{\"key2\":\"value2\"},\"jsonStringKey1\":\"{\"key\": \"value\", \"nestedKey\": {\"key2\": \"value2\"},}\"}]}\"; line: 1, column: 78]" } ] }
URI:    /test
STATUS: 500
MESSAGE:    com.github.tomakehurst.wiremock.common.JsonException: { "errors" : [ { "code" : 10, "source" : { }, "title" : "Error parsing JSON", "detail" : "Unexpected character ('k' (code 107)): was expecting comma to separate Object entries\n at [Source: (String)\"{\"data\":[{\"key1\":\"value\",\"nestedKey1\":{\"key2\":\"value2\"},\"jsonStringKey1\":\"{\"key\": \"value\", \"nestedKey\": {\"key2\": \"value2\"},}\"}]}\"; line: 1, column: 78]" } ] }
SERVLET:    com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet-37eeec90
CAUSED BY:  com.github.tomakehurst.wiremock.common.JsonException: { "errors" : [ { "code" : 10, "source" : { }, "title" : "Error parsing JSON", "detail" : "Unexpected character ('k' (code 107)): was expecting comma to separate Object entries\n at [Source: (String)\"{\"data\":[{\"key1\":\"value\",\"nestedKey1\":{\"key2\":\"value2\"},\"jsonStringKey1\":\"{\"key\": \"value\", \"nestedKey\": {\"key2\": \"value2\"},}\"}]}\"; line: 1, column: 78]" } ] }
Caused by:
com.github.tomakehurst.wiremock.common.JsonException: {
  "errors" : [ {
    "code" : 10,
    "source" : { },
    "title" : "Error parsing JSON",
    "detail" : "Unexpected character ('k' (code 107)): was expecting comma to separate Object entries\n at [Source: (String)\"{\"data\":[{\"key1\":\"value\",\"nestedKey1\":{\"key2\":\"value2\"},\"jsonStringKey1\":\"{\"key\": \"value\", \"nestedKey\": {\"key2\": \"value2\"},}\"}]}\"; line: 1, column: 78]"
  } ]
}
    at com.github.tomakehurst.wiremock.common.JsonException.fromJackson(JsonException.java:52)
    at com.github.tomakehurst.wiremock.common.Json.read(Json.java:78)
    at com.github.tomakehurst.wiremock.common.Json.node(Json.java:152)
    at com.github.tomakehurst.wiremock.http.Body.<init>(Body.java:57)
    at com.github.tomakehurst.wiremock.http.Body.fromJsonBytes(Body.java:82)
    at com.github.tomakehurst.wiremock.extension.responsetemplating.ResponseTemplateTransformer.applyTemplatedResponseBody(ResponseTemplateTransformer.java:210)
    at com.github.tomakehurst.wiremock.extension.responsetemplating.ResponseTemplateTransformer.transform(ResponseTemplateTransformer.java:99)
    at com.github.tomakehurst.wiremock.stubbing.AbstractStubMappings.applyV2Transformations(AbstractStubMappings.java:142)
    at com.github.tomakehurst.wiremock.stubbing.AbstractStubMappings.serveFor(AbstractStubMappings.java:100)
    at com.github.tomakehurst.wiremock.core.WireMockApp.serveStubFor(WireMockApp.java:270)
    at com.github.tomakehurst.wiremock.http.StubRequestHandler.handleRequest(StubRequestHandler.java:72)
    at com.github.tomakehurst.wiremock.http.AbstractRequestHandler.handle(AbstractRequestHandler.java:72)
    at com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet.service(WireMockHandlerDispatchingServlet.java:157)
    at wiremock.jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587)
    at wiremock.org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:764)
    at wiremock.org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1665)
    at wiremock.org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:527)
    at wiremock.org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)
    at wiremock.org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1381)
    at wiremock.org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176)
    at wiremock.org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484)
    at wiremock.org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174)
    at wiremock.org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1303)
    at wiremock.org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129)
    at wiremock.org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
    at wiremock.org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:822)
    at wiremock.org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:141)
    at wiremock.org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
    at wiremock.org.eclipse.jetty.server.Server.handle(Server.java:563)
    at wiremock.org.eclipse.jetty.server.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1598)
    at wiremock.org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:753)
    at wiremock.org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:501)
    at wiremock.org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:287)
    at wiremock.org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:314)
    at wiremock.org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)
    at wiremock.org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
    at wiremock.org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969)
    at wiremock.org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194)
    at wiremock.org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149)
    at java.base/java.lang.Thread.run(Thread.java:840)

已尝试的无效方案

  • 使用{{{ }}}包裹值,无效
  • 尝试多种转义方式,无效
  • 使用{{!-- --}}包裹跳过处理,但jsonStringKey1返回空字符串

求助

有没有人遇到过类似问题,能提供解决方案?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 17:49:59