Skip to content

Commit 0886f59

Browse files
authored
fix:issue 1420 (#1620)
1 parent 71ecd8e commit 0886f59

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

core/src/main/java/feign/Contract.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,8 @@ protected MethodMetadata parseAndValidateMetadata(Class<?> targetType, Method me
133133

134134
if (parameterTypes[i] == URI.class) {
135135
data.urlIndex(i);
136-
} else if (!isHttpAnnotation && parameterTypes[i] != Request.Options.class) {
136+
} else if (!isHttpAnnotation
137+
&& !Request.Options.class.isAssignableFrom(parameterTypes[i])) {
137138
if (data.isAlreadyProcessed(i)) {
138139
checkState(
139140
data.formParams().isEmpty() || data.bodyIndex() == null,

core/src/test/java/feign/OptionsTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,19 @@
3030
@SuppressWarnings("deprecation")
3131
public class OptionsTest {
3232

33+
static class ChildOptions extends Request.Options {
34+
public ChildOptions(int connectTimeoutMillis, int readTimeoutMillis) {
35+
super(connectTimeoutMillis, readTimeoutMillis);
36+
}
37+
}
38+
3339
interface OptionsInterface {
3440
@RequestLine("GET /")
3541
String get(Request.Options options);
3642

43+
@RequestLine("POST /")
44+
String getChildOptions(ChildOptions options);
45+
3746
@RequestLine("GET /")
3847
String get();
3948
}
@@ -68,4 +77,17 @@ public void normalResponseTest() {
6877

6978
assertThat(api.get(new Request.Options(1000, 4 * 1000))).isEqualTo("foo");
7079
}
80+
81+
@Test
82+
public void normalResponseForChildOptionsTest() {
83+
final MockWebServer server = new MockWebServer();
84+
server.enqueue(new MockResponse().setBody("foo").setBodyDelay(3, TimeUnit.SECONDS));
85+
86+
final OptionsInterface api =
87+
Feign.builder()
88+
.options(new ChildOptions(1000, 1000))
89+
.target(OptionsInterface.class, server.url("/").toString());
90+
91+
assertThat(api.getChildOptions(new ChildOptions(1000, 4 * 1000))).isEqualTo("foo");
92+
}
7193
}

0 commit comments

Comments
 (0)