@Test
  void parameterizedBaseApi() throws Exception {
    final List<MethodMetadata> md = contract.parseAndValidateMetadata(ParameterizedApi.class);

    final Map<String, MethodMetadata> byConfigKey = new LinkedHashMap<>();
    for (final MethodMetadata m : md) {
      byConfigKey.put(m.configKey(), m);
    }

    assertThat(byConfigKey)
        .containsOnlyKeys("ParameterizedApi#get(String)", "ParameterizedApi#getAll(Keys)");

    assertThat(byConfigKey.get("ParameterizedApi#get(String)").returnType())
        .isEqualTo(new TypeToken<Entity<String, Long>>() {}.getType());
    assertThat(byConfigKey.get("ParameterizedApi#get(String)").template())
        .hasHeaders(entry("Version", asList("1")), entry("Foo", asList("Bar")));

    assertThat(byConfigKey.get("ParameterizedApi#getAll(Keys)").returnType())
        .isEqualTo(new TypeToken<Entities<String, Long>>() {}.getType());
    assertThat(byConfigKey.get("ParameterizedApi#getAll(Keys)").bodyType())
        .isEqualTo(new TypeToken<Keys<String>>() {}.getType());
    assertThat(byConfigKey.get("ParameterizedApi#getAll(Keys)").template())
        .hasHeaders(entry("Version", asList("1")), entry("Foo", asList("Bar")));
  }
Body type is only for the body param.
core/src/test/java/feign/DefaultContractTest.java