当前位置: 首页 > 知识库问答 >
问题:

Wiremck存根错误:"无法识别的字段\"时间戳\"(类com.github.tomakehurst.wiremock.common.错误),未标记为可忽略"

秦弘亮
2023-03-14

我来这里是因为我还没有找到解决问题的办法。我实际上是在尝试用wiremock来存根一个响应(对模拟服务的调用是通过假装客户端完成的)。我的意图是在真实的假客户机上得到虚假的响应,不是在测试中,而是在真实的应用程序中。因此,在本例中,我不是在测试中截取WireMock服务器,而是在spring boot应用程序类中,然而,在截取响应时,我遇到了一个非常奇怪的错误,到目前为止,我已经调查了很多次,但都没有成功。

这是我到目前为止使用的代码:

@EnableFeignClients
@SpringBootApplication
public class CrmApplication
      implements CommandLineRunner
{
    private final ConfigurableApplicationContext context;private final ConfigurableApplicationContext context;

    @Autowired
    public CrmApplication( ConfigurableApplicationContext context )
    {
        this.context = context;
    }

    public static void main( String[] args )
    {
        log.info( "Starting the CRM Validator" );
        SpringApplication.run( CrmApplication.class, args );
        log.info( "Finishing the CRM Validator" );
    }

    @Override
    public void run( String... args )
    {
        final WireMockServer server = new WireMockServer( options().port( 8000 ) );
        server.start();
        log.info( "Wiremock has started in the following url: {}", "http://localhost:8000\n\n" );

        String resultJson = "{\"id\":1,\"hasJudicialRecords\":false}";

        MappingBuilder mappingBuilder = get( urlPathEqualTo( "/api/v1/judicial-registry/1") )
              .willReturn( aResponse().withStatus( 200 )
                                      .withHeader( "Content-Type", "application/json" )
                                      .withBody( resultJson ) )
        stubFor( mappingBuilder );

    }
}

这实际上是在stubFor(mappingBuilder)中失败的 行,这是我得到的例外:

java.lang.IllegalStateException: Failed to execute CommandLineRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:822) ~[spring-boot-2.4.5.jar:2.4.5]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:803) ~[spring-boot-2.4.5.jar:2.4.5]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:346) ~[spring-boot-2.4.5.jar:2.4.5]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1340) ~[spring-boot-2.4.5.jar:2.4.5]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329) ~[spring-boot-2.4.5.jar:2.4.5]
    at com.crm.demo.CrmApplication.main(CrmApplication.java:31) ~[main/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.4.5.jar:2.4.5]
Caused by: com.github.tomakehurst.wiremock.common.JsonException: {
  "errors" : [ {
    "code" : 10,
    "source" : {
      "pointer" : "/timestamp"
    },
    "title" : "Error parsing JSON",
    "detail" : "Unrecognized field \"timestamp\" (class com.github.tomakehurst.wiremock.common.Errors), not marked as ignorable"
  } ]
}
    at com.github.tomakehurst.wiremock.common.JsonException.fromJackson(JsonException.java:53) ~[wiremock-jre8-2.28.0.jar:na]
    at com.github.tomakehurst.wiremock.common.Json.read(Json.java:55) ~[wiremock-jre8-2.28.0.jar:na]
    at com.github.tomakehurst.wiremock.client.HttpAdminClient.safelyExecuteRequest(HttpAdminClient.java:486) ~[wiremock-jre8-2.28.0.jar:na]
    at com.github.tomakehurst.wiremock.client.HttpAdminClient.executeRequest(HttpAdminClient.java:454) ~[wiremock-jre8-2.28.0.jar:na]
    at com.github.tomakehurst.wiremock.client.HttpAdminClient.addStubMapping(HttpAdminClient.java:131) ~[wiremock-jre8-2.28.0.jar:na]
    at com.github.tomakehurst.wiremock.client.WireMock.register(WireMock.java:298) ~[wiremock-jre8-2.28.0.jar:na]
    at com.github.tomakehurst.wiremock.client.WireMock.register(WireMock.java:293) ~[wiremock-jre8-2.28.0.jar:na]
    at com.github.tomakehurst.wiremock.client.WireMock.givenThat(WireMock.java:104) ~[wiremock-jre8-2.28.0.jar:na]
    at com.github.tomakehurst.wiremock.client.WireMock.stubFor(WireMock.java:108) ~[wiremock-jre8-2.28.0.jar:na]
    at com.crm.demo.CrmApplication.run(CrmApplication.java:31) ~[main/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:819) ~[spring-boot-2.4.5.jar:2.4.5]
    ... 10 common frames omitted

所以一个问题是,wiremck只在测试中工作吗?

我已经尝试过更改JSON及其字段,但这似乎不起作用,所以如果你们中的任何人知道解决这个问题的方法会有帮助,或者如果你们也知道如何存根@FeignClient调用的api请求(不是在测试中,而是在真正的spring应用程序运行中),作为替代方法,也许也可以起作用。

非常感谢。


共有1个答案

戴品
2023-03-14

server.start()之后,您需要:

configureFor("localhost", server.port());
 类似资料:
  • 问题内容: 我收到以下错误,但找不到解决方法对我有用: 无法识别的字段“ GaugeDeviceId”(GaugeDevice类),未标记为可忽略 问题似乎是,该服务返回的属性名称前带有一个大写字母,而类属性则以一个下一个字母开头。 我试过了: 将propertyNames更改为第一个大写字母-相同的错误 添加到属性实例化-同样的错误 添加到相应的吸气剂-同样的错误 添加到相应的二传手-同样的错误

  • 在laravel 5.7/mysql 5应用程序中,我想将默认值设置为timestamp字段(创建时未设置): 但我有一个错误: 通常,我对时间戳字段没有任何问题,我假设该方法- 修改块#1:我把它放在我的作曲者那里了。json: 通过谷歌搜索,我发现我还需要安装marktopper/dbal时间戳类型https://github.com/art-institute-of-chicago/data

  • 我在雪花中有一个字符串值如下;

  • 所以,这个问题一直困扰着我,我似乎无法解决它。出现的错误是: 未捕获错误:语法错误,无法识别的表达式:[{“类型”:“标题”,“子类型”:“h1”,“标签”:“另一个测试表单”},{“类型”:“复选框组”,“标签”:“复选框组”,“名称”:“复选框组-1497353080484”,“值”:[{“标签”:“选项1”,“值”:“选项1”,“选定的”:true}]},{“类型”:“标题”,“子类型”:“

  • 我正在使用GitHub提供的antlr4语法分析器和词法分析器来解析Python3中的PHP。 当我直接使用这些语法时,我的PoC代码工作: antlr试验。py 这给出了输出 当我使用以下PHP时。g4语法,我犯了很多错误: 在对pythons导入交换评论之后,我得到了这个错误 然而,当我在语法上运行antlr4工具时,我没有出错。我在这里被难住了——是什么导致了这个问题?

  • 我试图记录iOS自动测试使用Appium检查员的指令使用教程... http://www.youtube.com/watch?v=Hv9A9WfYF4g 我的应用程序在工作区中。我使用iphonesimulator7.0构建了它,它显示了一条Success消息,然后在appium inspector上正确设置了构建应用程序的路径。但当我单击“启动”时,它会显示错误。 在它的控制台上..知道可能是什