【问题标题】:What is causing java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path是什么导致 java.lang.IllegalStateException:为 HTTP 路径映射的不明确的处理程序方法
【发布时间】:2025-12-14 17:35:01
【问题描述】:

我收到主题错误消息,但我不知道为什么。我有一组相当复杂的控制器。主体控制人如下:

package ws.daley.hollow.web.controller.admin;

import java.util.Locale;

import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import ws.daley.hollow.persistence.admin.model.Node;
import ws.daley.hollow.persistence.admin.model.PiProcessor;
import ws.daley.hollow.service.admin.intf.INodeService;
import ws.daley.hollow.service.admin.intf.IPiProcessorService;
import ws.daley.hollow.web.controller.CustomErrorController;
import ws.daley.hollow.web.controller.admin.abstractcontroller.AdminSerialSubController;
import ws.daley.hollow.web.controller.admin.abstractcontroller.ElementParameter;
import ws.daley.hollow.web.controller.admin.abstractcontroller.MyModelAndView;

@Controller
public class AdminPiProcessorController extends AdminSerialSubController<PiProcessor>
{
    private static final String ENTITY_NAME = "piprocessor";
    private static final String[] MEMBER_FIELD_NAMES = new String[] {"node"};

    @SuppressWarnings("hiding")
    @Autowired
    CustomErrorController customErrorController;

    @SuppressWarnings("hiding")
    @Autowired
    private IPiProcessorService service;

    @Autowired
    private INodeService memberService;

    @Autowired
    private MessageSource messages;

    public AdminPiProcessorController() {super(PiProcessor.class);}

    @PostConstruct
    @Override
    public void postConstruct() {super.postInit(getClass(), this.service, this.customErrorController, this.messages);}

    private ElementParameter[] getElementParameters()
    {
        return new ElementParameter[] {new ElementParameter(Node.class, "node", false, this.memberService)};
    }

    @ExceptionHandler({ Throwable.class})
    @Override
    public ModelAndView throwable(HttpServletRequest request, Throwable throwable) {return super.throwable(request, throwable);}

    @Override
    public String[] getMemberFieldNames() {return MEMBER_FIELD_NAMES;}

    @GetMapping(value = STUB, params = ENTITY_NAME)
    @Override
    public MyModelAndView adminEditEntityList(Model model, Locale locale) {return super.adminEditEntityList(model, locale);}

    @GetMapping(value = STUB, params = { ENTITY_NAME, EDIT })
    public MyModelAndView adminWithEntityId(@RequestParam("name") String name, Model model, Locale locale) {return super.adminWithEntityId(model, locale, name, getElementParameters());}

    @GetMapping(value = STUB, params = { ENTITY_NAME, NEW })
    public MyModelAndView adminWithEntityNew(Model model, Locale locale) {return super.adminWithEntityNew(model, locale, getElementParameters());}

    @PostMapping(value = STUB, params = { ENTITY_NAME, SUBMIT })
    public MyModelAndView adminWithEntitySave(@ModelAttribute(ENTITY_NAME) PiProcessor entity, @RequestParam("action") String action, Model model, Locale locale)
    {
        return super.adminWithEntitySubmit(model, locale, action, entity);
    }
}

package ws.daley.hollow.web.controller.admin;

import java.util.Collection;
import java.util.Locale;
import java.util.stream.Collectors;

import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import ws.daley.hollow.persistence.admin.model.Node;
import ws.daley.hollow.persistence.admin.model.NodeFunction;
import ws.daley.hollow.persistence.admin.model.PiProcessor;
import ws.daley.hollow.service.admin.intf.INodeFunctionService;
import ws.daley.hollow.service.admin.intf.INodeService;
import ws.daley.hollow.service.admin.intf.IPiProcessorService;
import ws.daley.hollow.web.controller.CustomErrorController;
import ws.daley.hollow.web.controller.admin.abstractcontroller.AdminNameSubController;
import ws.daley.hollow.web.controller.admin.abstractcontroller.ElementParameter;
import ws.daley.hollow.web.controller.admin.abstractcontroller.MyModelAndView;

@Controller
public class AdminNodeController extends AdminNameSubController<Node>
{
    private static final String ENTITY_NAME = "node";
    private static final String[] MEMBER_FIELD_NAMES = new String[] { "nodeFunction" };

    @SuppressWarnings("hiding")
    @Autowired
    CustomErrorController customErrorController;

    @SuppressWarnings("hiding")
    @Autowired
    private INodeService service;

    @Autowired
    private IPiProcessorService piProcessorService;

    @Autowired
    private INodeFunctionService memberService;

    @Autowired
    private MessageSource messages;

    public AdminNodeController() {super(Node.class);}

    @PostConstruct
    @Override
    public void postConstruct() {super.postInit(getClass(), this.service, this.customErrorController, this.messages);}

    private ElementParameter[] getElementParameters()
    {
        return new ElementParameter[] {new ElementParameter(NodeFunction.class, "nodeFunction", false, this.memberService)};
    }

    @ExceptionHandler({ Throwable.class})
    @Override
    public ModelAndView throwable(HttpServletRequest request, Throwable throwable) {return super.throwable(request, throwable);}

    @Override
    public String[] getMemberFieldNames() {return MEMBER_FIELD_NAMES;}

    @GetMapping(value = STUB, params = ENTITY_NAME)
    @Override
    public MyModelAndView adminEditEntityList(Model model, Locale locale) {return super.adminEditEntityList(model, locale);}

    @GetMapping(value = STUB, params = { ENTITY_NAME, EDIT })
    public MyModelAndView adminWithEntityId(@RequestParam("name") String name, Model model, Locale locale) {return super.adminWithEntityId(model, locale, name, getElementParameters());}

    @GetMapping(value = STUB, params = { ENTITY_NAME, NEW })
    public MyModelAndView adminWithEntityNew(Model model, Locale locale) {return super.adminWithEntityNew(model, locale, getElementParameters());}

    @PostMapping(value = STUB, params = { ENTITY_NAME, SUBMIT })
    public MyModelAndView adminWithEntitySave(@ModelAttribute(ENTITY_NAME) Node entity, @RequestParam("action") String action, Model model, Locale locale)
    {
        if ("Delete".equals(action))
        {
            Collection<PiProcessor> piProcessors = this.piProcessorService.queryByNode(entity.getName());
            if (piProcessors != null && piProcessors.size() > 0)
            {
                String names = piProcessors.stream().map(r -> r.getName()).collect(Collectors.joining(", "));
                MyModelAndView mav = super.adminWithEntityId(model, locale, entity.getName());
                mav.addObject("error", "Cannot delete node function. It is used in the following PiProcessor(s): "+names);
                return mav;
            }
        }
        return super.adminWithEntitySubmit(model, locale, action, entity);
    }
}

参数为:

STUB=/server-admin
EDIT=edit
NEW=new
SUBMIT=submit

我还制作了一个 AbstractHandler 的副本,并将其放在我自己的源代码树中的包 org.springframework.web.servlet.handler 中。我添加了对它进行了以下更改:

添加

private static Logger logger = LoggerFactory.getLogger(AbstractHandlerMethodMapping.class);

添加

            logger.warn("Url :"+request.getContentType().toString());
            logger.warn("Request: "+request.toString());
            logger.warn("Context Path: "+request.getContextPath().toString());
            logger.warn("Method: "+request.getMethod().toString());
            logger.warn("Query string: "+request.getQueryString().toString());
            logger.warn("Scheme: "+request.getScheme().toString());
            Enumeration<String> e = request.getParameterNames();
            while(e.hasMoreElements())
            {
                String parameterName = e.nextElement();
                String parameter = request.getParameter(parameterName).toString();
                logger.warn("Parameter: "+parameterName+"->"+parameter);
            }
            logger.warn("matches:");
            for(Match match:matches)
                logger.warn("\t"+match.toString());
            logger.warn("bestMatch: "+bestMatch.toString());
            logger.warn("secondBestMatch: "+secondBestMatch.toString());

就在声明之前:

                    throw new IllegalStateException("Ambiguous handler methods mapped for HTTP path '" +
                        request.getRequestURL() + "': {" + m1 + ", " + m2 + "}");

输出是:

webadmin - 2018-02-20 21:13:32,170 [http-nio-8081-exec-9] WARN  org.springframework.web.servlet.handler.AbstractHandlerMethodMapping - Url :application/x-www-form-urlencoded
webadmin - 2018-02-20 21:13:32,170 [http-nio-8081-exec-9] WARN  org.springframework.web.servlet.handler.AbstractHandlerMethodMapping - Request: SecurityContextHolderAwareRequestWrapper[ org.springframework.security.web.context.HttpSessionSecurityContextRepository$Servlet3SaveToSessionRequestWrapper@21a71563]
webadmin - 2018-02-20 21:13:32,170 [http-nio-8081-exec-9] WARN  org.springframework.web.servlet.handler.AbstractHandlerMethodMapping - Context Path: 
webadmin - 2018-02-20 21:13:32,171 [http-nio-8081-exec-9] WARN  org.springframework.web.servlet.handler.AbstractHandlerMethodMapping - Method: POST
webadmin - 2018-02-20 21:13:32,171 [http-nio-8081-exec-9] WARN  org.springframework.web.servlet.handler.AbstractHandlerMethodMapping - Query string: lang=en_US&piprocessor&submit
webadmin - 2018-02-20 21:13:32,171 [http-nio-8081-exec-9] WARN  org.springframework.web.servlet.handler.AbstractHandlerMethodMapping - Scheme: http
webadmin - 2018-02-20 21:13:32,171 [http-nio-8081-exec-9] WARN  org.springframework.web.servlet.handler.AbstractHandlerMethodMapping - Parameter: lang->en_US
webadmin - 2018-02-20 21:13:32,172 [http-nio-8081-exec-9] WARN  org.springframework.web.servlet.handler.AbstractHandlerMethodMapping - Parameter: piprocessor->
webadmin - 2018-02-20 21:13:32,172 [http-nio-8081-exec-9] WARN  org.springframework.web.servlet.handler.AbstractHandlerMethodMapping - Parameter: submit->
webadmin - 2018-02-20 21:13:32,172 [http-nio-8081-exec-9] WARN  org.springframework.web.servlet.handler.AbstractHandlerMethodMapping - Parameter: id->16
webadmin - 2018-02-20 21:13:32,172 [http-nio-8081-exec-9] WARN  org.springframework.web.servlet.handler.AbstractHandlerMethodMapping - Parameter: name->000000009ec1f24d
webadmin - 2018-02-20 21:13:32,173 [http-nio-8081-exec-9] WARN  org.springframework.web.servlet.handler.AbstractHandlerMethodMapping - Parameter: node->18
webadmin - 2018-02-20 21:13:32,173 [http-nio-8081-exec-9] WARN  org.springframework.web.servlet.handler.AbstractHandlerMethodMapping - Parameter: action->Submit
webadmin - 2018-02-20 21:13:32,173 [http-nio-8081-exec-9] WARN  org.springframework.web.servlet.handler.AbstractHandlerMethodMapping - matches:
webadmin - 2018-02-20 21:13:32,173 [http-nio-8081-exec-9] WARN  org.springframework.web.servlet.handler.AbstractHandlerMethodMapping -  {[/server-admin],methods=[POST],params=[node && submit]}
webadmin - 2018-02-20 21:13:32,174 [http-nio-8081-exec-9] WARN  org.springframework.web.servlet.handler.AbstractHandlerMethodMapping -  {[/server-admin],methods=[POST],params=[piprocessor && submit]}
webadmin - 2018-02-20 21:13:32,174 [http-nio-8081-exec-9] WARN  org.springframework.web.servlet.handler.AbstractHandlerMethodMapping - bestMatch: {[/server-admin],methods=[POST],params=[node && submit]}
webadmin - 2018-02-20 21:13:32,174 [http-nio-8081-exec-9] WARN  org.springframework.web.servlet.handler.AbstractHandlerMethodMapping - secondBestMatch: {[/server-admin],methods=[POST],params=[piprocessor && submit]}
webadmin - 2018-02-20 21:13:46,821 [http-nio-8081-exec-9] DEBUG ws.daley.hollow.web.error.RestResponseEntityExceptionHandler - ws.daley.hollow.web.error.RestResponseEntityExceptionHandler::handleInternal(ex={java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path 'http://localhost:8081/server-admin': {public ws.daley.hollow.web.controller.admin.abstractcontroller.MyModelAndView ws.daley.hollow.web.controller.admin.AdminNodeController.adminWithEntitySave(ws.daley.hollow.persistence.admin.model.Node,java.lang.String,org.springframework.ui.Model,java.util.Locale), public ws.daley.hollow.web.controller.admin.abstractcontroller.MyModelAndView ws.daley.hollow.web.controller.admin.AdminPiProcessorController.adminWithEntitySave(ws.daley.hollow.persistence.admin.model.PiProcessor,java.lang.String,org.springframework.ui.Model,java.util.Locale)}}, request={ServletWebRequest: uri=/server-admin;client=0:0:0:0:0:0:0:1;session=110061C48999447505CF1AA326575B98;user=test}
webadmin - 2018-02-20 21:13:46,824 [http-nio-8081-exec-9] ERROR ws.daley.hollow.web.error.RestResponseEntityExceptionHandler - 500 Status Code
java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path 'http://localhost:8081/server-admin': {public ws.daley.hollow.web.controller.admin.abstractcontroller.MyModelAndView ws.daley.hollow.web.controller.admin.AdminNodeController.adminWithEntitySave(ws.daley.hollow.persistence.admin.model.Node,java.lang.String,org.springframework.ui.Model,java.util.Locale), public ws.daley.hollow.web.controller.admin.abstractcontroller.MyModelAndView ws.daley.hollow.web.controller.admin.AdminPiProcessorController.adminWithEntitySave(ws.daley.hollow.persistence.admin.model.PiProcessor,java.lang.String,org.springframework.ui.Model,java.util.Locale)}
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:394)
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:323)
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:1)
    at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:351)
    at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1188)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:964)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:881)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:155)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

我忘了提到我使用的是 spring-boot 1.5.10.RELEASE 并且已经移动到 2.0.0.RC1 并且都有这个问题。

此外,在另外十几个模块中,我有完全相同的结构。 AdminPiProcessorController 是唯一表现出这种行为的模块。模型、存储库、服务和控制器被高度抽象化,以完全允许这种风格的代码。不幸的是,构建一个简单的测试用例变得非常困难。

【问题讨论】:

标签: java spring spring-mvc spring-boot spring-tool-suite


【解决方案1】:

虽然从技术上讲不是一个答案,但问题已经自行消失了。我认为类似的问题之前的行为方式相同......

【讨论】:

    【解决方案2】:

    你在两个控制器中有相同的映射

     AdminPiProcessorController 
     AdminNodeController 
    

    因为映射对于应用程序来说是全局的,所以您不能为两个不同的控制器使用相同的 uri。

    希望对你有帮助。

    控制器类 AdminPiProcessorController :

    @GetMapping(value = STUB, params = ENTITY_NAME)
        @Override
        public MyModelAndView adminEditEntityList(Model model, Locale locale) {return super.adminEditEntityList(model, locale);}
    

    具有与 AdminNodeController 中相同的映射

    @GetMapping(value = STUB, params = ENTITY_NAME)
        @Override
        public MyModelAndView adminEditEntityList(Model model, Locale locale) {return super.adminEditEntityList(model, locale);}
    

    请检查其他方法。

    【讨论】:

    • 你能解释一下我是如何得到相同的映射的吗? adminWithEntitySave 方法具有相似的来源,但是,@PostMapping 参数包含 ENTITY_NAME,在一种情况下是“piprocessor”,在另一种情况下是“node”。我有十几个包含相同内容的控制器,并且所有其他控制器都正常工作。
    • 看来这两种方法确实是一样的。但是 ENTITY_NAME 是
    • 看来这两种方法确实是一样的。但是 ENTITY_NAME 是在每个模块顶部声明的私有静态最终字符串。在 AdminPiProcessorController 中,它被声明为“piprocessor”,而在 AdminNodeController 中,它被声明为“node”。这应该导致@GetMapping(value = "/server-admin", params = "piprocessor") 为一个,@GetMapping(value = "/server-admin", params = "node") 为另一个。
    • 但问题是两种不同的方法都指向一个 url。 Url 不能同时用两个方法附加。
    • 如果您查看日志,您会看到两个可能的匹配项是:{[/server-admin],methods=[POST],params=[piprocessor && submit]} 和 { [/server-admin],methods=[POST],params=[node && submit]} 并且有一个“piprocessor”的请求参数,没有一个“node”的参数。我看不出带有“piprocessor”参数的请求如何匹配“node”参数。
    最近更新 更多