微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Wiremock 存根错误:“无法识别的字段\”时间戳\”类 com.github.tomakehurst.wiremock.common.Errors,未标记为可忽略的“

如何解决Wiremock 存根错误:“无法识别的字段\”时间戳\”类 com.github.tomakehurst.wiremock.common.Errors,未标记为可忽略的“

我来这里是因为我还没有找到任何解决我的问题的方法。我实际上是在尝试使用 wiremock 存根响应(对 Mocked 服务的调用是通过 FeignClient 完成的)。我的目的是用真正的假客户端得到一个假响应,不是在测试中,而是在真正的应用程序中。因此,在这种情况下,我不是在测试中存根 wiremockServer,而是在 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

所以一个问题是,wiremock 只在测试中有效吗?

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

谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。