title: Pattern match for individual parameters in pact-consumer tests
body: <p>Using pact-jvm - Java</p>
  
  <p>so we have our api which responds with decimal/float values for few parameters. "body": {
  "status": "api is up.",
  "totalTime": 0.005939006805419922
  }"
  I tried with regex match but pact body generate the data and that was a mismatch to the decimal that was returned by the actual api.</p>
  
  <pre><code>package pact;
  import au.com.dius.pact.consumer.dsl.DslPart;
  import au.com.dius.pact.consumer.dsl.PactDslJsonBody;
  import au.com.dius.pact.consumer.dsl.PactDslWithProvider;
  import au.com.dius.pact.model.PactFragment;
  import au.com.dius.pact.consumer.ConsumerPactTest;
  import java.util.Map;
  import java.util.HashMap;
  import au.com.dius.pact.consumer.PactProviderRule;
  import static org.hamcrest.MatcherAssert.assertThat;
  import static org.hamcrest.Matchers.hasKey;
  import static org.hamcrest.Matchers.is;
  import static org.hamcrest.Matchers.nullValue;
  import org.junit.Rule;
  import au.com.dius.pact.consumer.dsl.PactDslJsonArray;
  
  public class PactTest extends ConsumerPactTest {
  
      @Rule
      public PactProviderRule mockProvider = new PactProviderRule("test_provider", "localhost", 1234, this);
      String v3Path = "/v3";
      private DslPart body = new PactDslJsonBody()
              .stringType("status", "api is up.")
              .decimalType("totalTime", 0.005939006805419922);
  
      protected PactFragment createFragment(PactDslWithProvider builder) {
          Map&lt;String, String&gt; headers = new HashMap&lt;String, String&gt;();
          headers.put("Content-Type", "application/json");
  
          PactFragment fragment = builder
                  .uponReceiving("response")
                  .path(v3Path)
                  .method("GET")
                  .willRespondWith()
                  .status(200)
                  .headers(headers)
                  .body(body)
                  .toFragment();
          return fragment;
      }
  
      @Override
      protected String providerName() {
          return "test_provider";
      }
  
      @Override
      protected String consumerName() {
          return "test_consumer";
      }
  
      @Override
      protected void runTest(String url) {
          Map response;
          try {
              response = new ConsumerClient(url).getAsMap(v3Path, "");
          } catch (Exception e) {
              throw new RuntimeException(e);
          }
      }
  }
  </code></pre>
  
  <p>pact generated:</p>
  
  <pre><code>{
  "provider": {
      "name": "test_provider"
  },
  "consumer": {
      "name": "test_consumer"
  },
  "interactions": [
      {
          "description": "API v3 endpoint response",
          "request": {
              "method": "GET",
              "path": "/v3"
          },
          "response": {
              "status": 200,
              "headers": {
                  "Content-Type": "application/json"
              },
              "body": {
                  "status": "api is up.",
                  "totalTime": 0.005939006805419922
              },
              "matchingRules": {
                  "body": {
                      "$.status": {
                          "matchers": [
                              {
                                  "match": "type"
                              }
                          ]
                      },
                      "$.totalTime": {
                          "matchers": [
                              {
                                  "match": "decimal"
                              }
                          ]
                      }
                  }
              }
          }
      }
  ],
  "metadata": {
      "pact-specification": {
          "version": "3.0.0"
      },
      "pact-jvm": {
          "version": "3.5.0-beta.2"
      }
  }
  </code></pre>
  
  <p>}</p>
  
  <p>diff of pact vs the actual response:</p>
  
  <pre><code>0) Verifying a pact between test_consumer and test_provider - API v3 endpoint response returns a response which has a matching body
    $.body.totalTime -&gt; Expected 0.005939006805419922 but received 0.00545501708984375
  </code></pre>
  
  <p>Diff:</p>
  
  <pre><code>  @1
        "status": "api is up.",
    -    "totalTime": 0.005939006805419922
    +    "totalTime": 0.00545501708984375
    }
  </code></pre>
  
  <p>so is it possible to do a "eachlike" instead of decimalType to match patterns of those values ? as I looked at eachLike and it takes in a string and an int - <a href="https://github.com/DiUS/pact-jvm/blob/master/pact-jvm-consumer/src/main/java/au/com/dius/pact/consumer/dsl/PactDslJsonBody.java#L580" rel="nofollow noreferrer">https://github.com/DiUS/pact-jvm/blob/master/pact-jvm-consumer/src/main/java/au/com/dius/pact/consumer/dsl/PactDslJsonBody.java#L580</a></p>