Skip to content

Commit d8ca662

Browse files
committed
Merge remote-tracking branch 'origin/4.1.x' into 4.2.x
2 parents 3cb464c + 535cdc0 commit d8ca662

File tree

2 files changed

+24
-32
lines changed

2 files changed

+24
-32
lines changed

spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringMvcContract.java

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2013-2024 the original author or authors.
2+
* Copyright 2013-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -279,16 +279,16 @@ protected void processAnnotationOnMethod(MethodMetadata data, Annotation methodA
279279
}
280280

281281
// produces
282-
parseProduces(data, method, methodMapping);
282+
parseProduces(data, methodMapping);
283283

284284
// consumes
285-
parseConsumes(data, method, methodMapping);
285+
parseConsumes(data, methodMapping);
286286

287287
// headers
288-
parseHeaders(data, method, methodMapping);
288+
parseHeaders(data, methodMapping);
289289

290290
// params
291-
parseParams(data, method, methodMapping);
291+
parseParams(data, methodMapping);
292292

293293
data.indexToExpander(new LinkedHashMap<>());
294294
}
@@ -371,25 +371,25 @@ private boolean queryMapParamPresent(MethodMetadata data) {
371371
return false;
372372
}
373373

374-
private void parseProduces(MethodMetadata md, Method method, RequestMapping annotation) {
374+
private void parseProduces(MethodMetadata md, RequestMapping annotation) {
375375
String[] serverProduces = annotation.produces();
376376
String clientAccepts = serverProduces.length == 0 ? null : emptyToNull(serverProduces[0]);
377377
if (clientAccepts != null) {
378378
md.template().header(ACCEPT, clientAccepts);
379379
}
380380
}
381381

382-
private void parseConsumes(MethodMetadata md, Method method, RequestMapping annotation) {
382+
private void parseConsumes(MethodMetadata md, RequestMapping annotation) {
383383
String[] serverConsumes = annotation.consumes();
384384
String clientProduces = serverConsumes.length == 0 ? null : emptyToNull(serverConsumes[0]);
385385
if (clientProduces != null) {
386386
md.template().header(CONTENT_TYPE, clientProduces);
387387
}
388388
}
389389

390-
private void parseHeaders(MethodMetadata md, Method method, RequestMapping annotation) {
390+
private void parseHeaders(MethodMetadata md, RequestMapping annotation) {
391391
// TODO: only supports one header value per key
392-
if (annotation.headers() != null && annotation.headers().length > 0) {
392+
if (annotation.headers() != null) {
393393
for (String header : annotation.headers()) {
394394
int index = header.indexOf('=');
395395
if (!header.contains("!=") && index >= 0) {
@@ -400,9 +400,9 @@ private void parseHeaders(MethodMetadata md, Method method, RequestMapping annot
400400
}
401401
}
402402

403-
private void parseParams(MethodMetadata data, Method method, RequestMapping methodMapping) {
403+
private void parseParams(MethodMetadata data, RequestMapping methodMapping) {
404404
String[] params = methodMapping.params();
405-
if (params == null || params.length == 0) {
405+
if (params == null) {
406406
return;
407407
}
408408
for (String param : params) {
@@ -411,7 +411,10 @@ private void parseParams(MethodMetadata data, Method method, RequestMapping meth
411411
data.template().query(resolve(nameValueResolver.getName()), resolve(nameValueResolver.getValue()));
412412
}
413413
else {
414-
throw new IllegalArgumentException("Negated params are not supported: " + param);
414+
if (LOG.isDebugEnabled()) {
415+
LOG.debug("Negated params are not supported by Feign and ignored during parameter processing: "
416+
+ param);
417+
}
415418
}
416419
}
417420
}
@@ -477,13 +480,7 @@ private boolean isMultipartFormData(MethodMetadata data) {
477480
return false;
478481
}
479482

480-
private static class ConvertingExpanderFactory {
481-
482-
private final ConversionService conversionService;
483-
484-
ConvertingExpanderFactory(ConversionService conversionService) {
485-
this.conversionService = conversionService;
486-
}
483+
private record ConvertingExpanderFactory(ConversionService conversionService) {
487484

488485
Param.Expander getExpander(TypeDescriptor typeDescriptor) {
489486
return value -> {

spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringMvcContractTests.java

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2013-2024 the original author or authors.
2+
* Copyright 2013-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -69,6 +69,7 @@
6969
import static feign.CollectionFormat.CSV;
7070
import static feign.CollectionFormat.SSV;
7171
import static org.assertj.core.api.Assertions.assertThat;
72+
import static org.assertj.core.api.Assertions.assertThatCode;
7273
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
7374
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
7475
import static org.junit.jupiter.api.Assumptions.assumeTrue;
@@ -567,11 +568,11 @@ void testProcessAnnotations_ParseParams_MultipleParamsWithoutValue() throws Exce
567568
}
568569

569570
@Test
570-
void testProcessAnnotations_ParseParams_NotEqualParams() throws Exception {
571-
assertThatIllegalArgumentException().isThrownBy(() -> {
572-
Method method = TestTemplate_ParseParams.class.getDeclaredMethod("notEqualParams");
571+
void testProcessAnnotations_ParseParams_NegatedParams() {
572+
assertThatCode(() -> {
573+
Method method = TestTemplate_ParseParams.class.getDeclaredMethod("negatedParams");
573574
contract.parseAndValidateMetadata(method.getDeclaringClass(), method);
574-
});
575+
}).doesNotThrowAnyException();
575576
}
576577

577578
@Test
@@ -895,7 +896,7 @@ public interface TestTemplate_ParseParams {
895896
ResponseEntity<TestObject> mixParams();
896897

897898
@GetMapping(value = "test", params = { "p1!=1" })
898-
ResponseEntity<TestObject> notEqualParams();
899+
ResponseEntity<TestObject> negatedParams();
899900

900901
@GetMapping(value = "test", params = { "p1=1" })
901902
ResponseEntity<TestObject> paramsAndRequestParam(@RequestParam("p2") String p2);
@@ -1066,13 +1067,7 @@ public int hashCode() {
10661067

10671068
@Override
10681069
public String toString() {
1069-
return new StringBuilder("TestObject{").append("something='")
1070-
.append(something)
1071-
.append("', ")
1072-
.append("number=")
1073-
.append(number)
1074-
.append("}")
1075-
.toString();
1070+
return "TestObject{" + "something='" + something + "', " + "number=" + number + "}";
10761071
}
10771072

10781073
}

0 commit comments

Comments
 (0)