Skip to content

Commit

Permalink
MapMethodProcessor supportsParameter is more specific
Browse files Browse the repository at this point in the history
Closes gh-33160
  • Loading branch information
rstoyanchev committed Dec 11, 2024
1 parent 68997d8 commit 66f33a8
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2022 the original author or authors.
* Copyright 2002-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -20,6 +20,7 @@

import org.springframework.core.MethodParameter;
import org.springframework.lang.Nullable;
import org.springframework.ui.ModelMap;
import org.springframework.util.Assert;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
Expand All @@ -42,7 +43,9 @@ public class MapMethodProcessor implements HandlerMethodArgumentResolver, Handle

@Override
public boolean supportsParameter(MethodParameter parameter) {
return (Map.class.isAssignableFrom(parameter.getParameterType()) &&
// We don't support any type of Map
Class<?> type = parameter.getParameterType();
return ((type.isAssignableFrom(Map.class) || ModelMap.class.isAssignableFrom(type)) &&
parameter.getParameterAnnotations().length == 0);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package org.springframework.web.method.annotation;

import java.util.HashMap;
import java.util.Map;

import org.junit.jupiter.api.BeforeEach;
Expand Down Expand Up @@ -63,8 +64,13 @@ void setUp() {
void supportsParameter() {
assertThat(this.processor.supportsParameter(
this.resolvable.annotNotPresent().arg(Map.class, String.class, Object.class))).isTrue();

assertThat(this.processor.supportsParameter(
this.resolvable.annotPresent(RequestBody.class).arg(Map.class, String.class, Object.class))).isFalse();

// gh-33160
assertThat(this.processor.supportsParameter(
ResolvableMethod.on(getClass()).argTypes(ExtendedMap.class).build().arg(ExtendedMap.class))).isFalse();
}

@Test
Expand Down Expand Up @@ -100,4 +106,15 @@ private Map<String, Object> handle(
return null;
}


@SuppressWarnings("unused")
private Map<String, Object> handle(ExtendedMap extendedMap) {
return null;
}


@SuppressWarnings("serial")
private static final class ExtendedMap extends HashMap<String, Object> {
}

}

0 comments on commit 66f33a8

Please sign in to comment.