Browse Source

Adapt no-arg value from interface-based InvocationHandler callback

Closes gh-30756
pull/30915/head
Juergen Hoeller 3 years ago
parent
commit
b77d4d01c5
  1. 4
      spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilder.java
  2. 46
      spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilderTests.java

4
spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilder.java

@ -745,8 +745,8 @@ public class MvcUriComponentsBuilder {
@Override @Override
@Nullable @Nullable
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { public Object invoke(Object proxy, Method method, @Nullable Object[] args) {
return intercept(proxy, method, args, null); return intercept(proxy, method, (args != null ? args : new Object[0]), null);
} }
@Override @Override

46
spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilderTests.java

@ -293,6 +293,14 @@ public class MvcUriComponentsBuilderTests {
assertThat(uriComponents.toUriString()).isEqualTo("http://localhost/input"); assertThat(uriComponents.toUriString()).isEqualTo("http://localhost/input");
} }
@Test
public void fromMethodCallOnSubclass() {
UriComponents uriComponents = fromMethodCall(on(ExtendedController.class).myMethod(null)).build();
assertThat(uriComponents.toUriString()).startsWith("http://localhost");
assertThat(uriComponents.toUriString()).endsWith("/extended/else");
}
@Test @Test
public void fromMethodCallPlain() { public void fromMethodCallPlain() {
UriComponents uriComponents = fromMethodCall(on(ControllerWithMethods.class).myMethod(null)).build(); UriComponents uriComponents = fromMethodCall(on(ControllerWithMethods.class).myMethod(null)).build();
@ -302,11 +310,27 @@ public class MvcUriComponentsBuilderTests {
} }
@Test @Test
public void fromMethodCallOnSubclass() { public void fromMethodCallPlainWithNoArguments() {
UriComponents uriComponents = fromMethodCall(on(ExtendedController.class).myMethod(null)).build(); UriComponents uriComponents = fromMethodCall(on(ControllerWithMethods.class).myMethod()).build();
assertThat(uriComponents.toUriString()).startsWith("http://localhost"); assertThat(uriComponents.toUriString()).startsWith("http://localhost");
assertThat(uriComponents.toUriString()).endsWith("/extended/else"); assertThat(uriComponents.toUriString()).endsWith("/something/noarg");
}
@Test
public void fromMethodCallPlainOnInterface() {
UriComponents uriComponents = fromMethodCall(on(ControllerInterface.class).myMethod(null)).build();
assertThat(uriComponents.toUriString()).startsWith("http://localhost");
assertThat(uriComponents.toUriString()).endsWith("/something/else");
}
@Test
public void fromMethodCallPlainWithNoArgumentsOnInterface() {
UriComponents uriComponents = fromMethodCall(on(ControllerInterface.class).myMethod()).build();
assertThat(uriComponents.toUriString()).startsWith("http://localhost");
assertThat(uriComponents.toUriString()).endsWith("/something/noarg");
} }
@Test @Test
@ -575,6 +599,11 @@ public class MvcUriComponentsBuilderTests {
return null; return null;
} }
@RequestMapping("/noarg")
HttpEntity<Void> myMethod() {
return null;
}
@RequestMapping("/{id}/foo") @RequestMapping("/{id}/foo")
HttpEntity<Void> methodWithPathVariable(@PathVariable String id) { HttpEntity<Void> methodWithPathVariable(@PathVariable String id) {
return null; return null;
@ -616,6 +645,17 @@ public class MvcUriComponentsBuilderTests {
} }
@RequestMapping("/something")
public interface ControllerInterface {
@RequestMapping("/else")
HttpEntity<Void> myMethod(@RequestBody Object payload);
@RequestMapping("/noarg")
HttpEntity<Void> myMethod();
}
@RequestMapping("/user/{userId}/contacts") @RequestMapping("/user/{userId}/contacts")
static class UserContactController { static class UserContactController {

Loading…
Cancel
Save