(PERSONALE) By path, method, and presence of pa-6ren">
gpt4 book ai didi

java - 在 Spring MVC 中获取 HTTP 请求参数

转载 作者:行者123 更新时间:2023-12-02 07:26:24 25 4
gpt4 key购买 nike

我在 Spring MVC 中获取 HTTP 请求的参数时遇到问题。

在我看来,我有以下链接:

<li>
<a id="byParameter2" class="textLink"
href="<c:url value="/mapping/parameter?myparam=blabla" />">(PERSONALE) By path, method, and presence of parameter with value="blabla"</a>
</li>

这是我的 Controller 类代码:

package org.springframework.samples.mvc.mapping;

import javax.servlet.http.HttpServletRequest;

import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller

public class MappingController {

/* Gestisce HTTP Request di tipo GET che contengono un parametro di nome "foo" verso il percorso "/mapping/parameter"
* Restituisce una stringa nel campo body della HTTP Response
*/
@RequestMapping(value="/mapping/parameter", method=RequestMethod.GET, params="foo")
public @ResponseBody String byParameter() {
return "Mapped by path + method + presence of query parameter!";
}

/* (PERSONALE) Gestisce richieste HTTP di tipo GET verso il path "/mapping/parameter" solo se NON contengono un parametro di input di nome "myparam"
* e ne estrae il valore */
@RequestMapping(value="/mapping/parameter", method=RequestMethod.GET, params="myparam")
public @ResponseBody String byParameter(@RequestParam("myparam") String myparam) {
return "Mapped by path + method + presence of query parameter! (MappingController). Parameter value = " + myparam;
}


/* Gestisce HTTP Request di tipo GET che NON contengono un parametro di nome "foo" verso il percorso "/mapping/parameter"
* Restituisce una stringa nel campo body della HTTP Response
*/
@RequestMapping(value="/mapping/parameter", method=RequestMethod.GET, params="!foo")
public @ResponseBody String byParameterNegation() {
return "Mapped by path + method + not presence of query parameter!";
}


}

问题是,当我运行应用程序时,如果我单击生成针对 "/mapping/parameter?myparam=blabla" 的 HTTP 请求的链接,则该请求不会由我的 处理>public @ResponseBody String byParameter(@RequestParam("myparam") String myparam) 方法,我在浏览器中收到以下错误消息:

**HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path 'http://localhost:8080/spring-mvc-showcase/mapping/parameter': {public java.lang.String org.springframework.samples.mvc.mapping.MappingController.byParameter2(java.lang.String), public java.lang.String org.springframework.samples.mvc.mapping.MappingController.byParameterNegation()}**

And the following error in the stack trace:

**SEVERE: Servlet.service() for servlet [appServlet] in context with path [/spring-mvc-showcase] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path 'http://localhost:8080/spring-mvc-showcase/mapping/parameter': {public java.lang.String org.springframework.samples.mvc.mapping.MappingController.byParameter2(java.lang.String), public java.lang.String org.springframework.samples.mvc.mapping.MappingController.byParameterNegation()}] with root cause
java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path 'http://localhost:8080/spring-mvc-showcase/mapping/parameter': {public java.lang.String org.springframework.samples.mvc.mapping.MappingController.byParameter2(java.lang.String), public java.lang.String org.springframework.samples.mvc.mapping.MappingController.byParameterNegation()}
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:262)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:212)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:55)
at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:297)
at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1091)
at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1076)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:896)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:917)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:813)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:798)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)**
为什么?哪里有问题?怎么解决呢?

最佳答案

尝试

@RequestMapping(value="/mapping/parameter", method=RequestMethod.GET, params="myparam,!foo") 为第二种方法。

@RequestMapping(value="/mapping/parameter", method=RequestMethod.GET, params="!myparam,!foo") 对于第三种方法

关于java - 在 Spring MVC 中获取 HTTP 请求参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13532357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com