Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Boot REST-即使使用唯一的路径变量,映射也不明确_Java_Spring_Spring Boot - Fatal编程技术网

Java Spring Boot REST-即使使用唯一的路径变量,映射也不明确

Java Spring Boot REST-即使使用唯一的路径变量,映射也不明确,java,spring,spring-boot,Java,Spring,Spring Boot,我有两个端点,它们有一组不同的路径变量。除非我在URL中提供可选参数(名称),否则它们都可以工作。然后Spring给出了模糊错误 可选参数name也出现在第二个端点中,这就是错误发生的原因 为什么Spring认为这些端点不明确? 必需的参数应使端点唯一(因为第一个端点包含参数“sourceid”,而第二个端点不包含参数)。以下URL给出了错误信息: /?sourceid=999&AppliantId=1&startingdate=2020&endingdate=2021&name=mobilea

我有两个端点,它们有一组不同的路径变量。除非我在URL中提供可选参数
(名称)
,否则它们都可以工作。然后Spring给出了模糊错误

可选参数
name
也出现在第二个端点中,这就是错误发生的原因

为什么Spring认为这些端点不明确?

必需的参数应使端点唯一(因为第一个端点包含参数“sourceid”,而第二个端点不包含参数)。以下URL给出了错误信息:

/?sourceid=999&AppliantId=1&startingdate=2020&endingdate=2021&name=mobileapp

第一个端点:

@GetMapping(value=“/”,params={“sourceid”、“applicationId”、“startingdate”、“endingdate”})
公共列表GetEventsByd(
@RequestParam(“sourceid”)字符串sourceid,
@RequestParam(“AppliantId”)字符串AppliantId,
@RequestParam(“startingdate”)字符串startingdate,
@RequestParam(“endingdate”)字符串endingdate,
@RequestParam(value=“name”,required=false)字符串名){
第二个端点:

@GetMapping(value=“/”,params={“name”、“applicationId”、“startingdate”、“endingdate”})
公共列表GetEventsByApplicationId(
@RequestParam(“AppliantId”)字符串AppliantId,
@RequestParam(“名称”)字符串名称,
@RequestParam(“startingdate”)字符串startingdate,
@RequestParam(“endingdate”)字符串(endingdate){
错误消息:

java.lang.IllegalStateException: Ambiguous handler methods mapped for '/event-example/': {public java.util.List com.eventrest.controller.MyController.getEventsById(java.lang.String,java.lang.String,java.lang.String,java.lang.String) throws java.text.ParseException, public java.util.List com.eventrest.controller.MyController.getEventsByApplicantId(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String) throws java.text.ParseException}
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:413) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:367) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:110) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:59) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:396) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1234) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1016) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.38.jar:4.0.FR]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.38.jar:4.0.FR]

Spring无法区分请求是否得到
http://localhost:8080/?sourceid=999&applicantid=1&startingdate=2020&endingdate=2021&name=mobileapp
将由
getEventsById()
getEventsByApplicantId()
处理,因为映射不明确

考虑到第二种方法中的
sourceid
required=false
,与第一种方法中的相同,这两种方法自然是相同的

有一种方法可以摆脱模棱两可的局面。 您可以根据请求参数条件缩小请求映射范围。您可以测试是否存在请求参数(myParam)、是否没有(!myParam)或是否存在特定值(myParam=myValue)

!sourceid
添加到
getEventsByApplicantId()
方法中的参数字段中,如下所示:

@GetMapping(value=“/”,params={“!sourceid”,“name”,“applicationId”,“startingdate”,“endingdate”})
公共列表GetEventsByApplicationId(
@RequestParam(“AppliantId”)字符串AppliantId,
@RequestParam(“名称”)字符串名称,
@RequestParam(“startingdate”)字符串startingdate,
@RequestParam(“endingdate”)字符串(endingdate){
// ..
}

Spring无法区分请求是否得到
http://localhost:8080/?sourceid=999&applicantid=1&startingdate=2020&endingdate=2021&name=mobileapp
将由
getEventsById()
getEventsByApplicantId()
处理,因为映射不明确

考虑到第二种方法中的
sourceid
required=false
,与第一种方法中的相同,这两种方法自然是相同的

有一种方法可以摆脱模棱两可的局面。 您可以根据请求参数条件缩小请求映射范围。您可以测试是否存在请求参数(myParam)、是否没有(!myParam)或是否存在特定值(myParam=myValue)

!sourceid
添加到
getEventsByApplicantId()
方法中的参数字段中,如下所示:

@GetMapping(value=“/”,params={“!sourceid”,“name”,“applicationId”,“startingdate”,“endingdate”})
公共列表GetEventsByApplicationId(
@RequestParam(“AppliantId”)字符串AppliantId,
@RequestParam(“名称”)字符串名称,
@RequestParam(“startingdate”)字符串startingdate,
@RequestParam(“endingdate”)字符串(endingdate){
// ..
}

我不知道这是否能解决您的问题,也不知道这对于非必需参数是否有必要,但我看到了“名称”第一个终结点的参数中缺少param。终结点不明确。您必须具有唯一的请求映射,而不考虑请求参数。这些不是路径变量,只是常规请求参数。请添加正确的代码(似乎不匹配)和实际异常。@Gaetitan这不起作用。如果“name”参数被添加到params中,使其成为必需参数,并且如果没有“name”参数,URL将不再工作。如果“name”参数包含在URL中,同样的模糊错误出现。@M.Deinum不匹配是什么意思?这是一个稍微简化的代码,但实际代码与更多参数相似。我不知道这是否能解决您的问题,也不知道这对于非必需的参数是否必要,但我看到了“名称”第一个终结点的参数中缺少param。终结点不明确。您必须具有唯一的请求映射,而不考虑请求参数。这些不是路径变量,只是常规请求参数。请添加正确的代码(似乎不匹配)和实际异常。@Gaetitan这不起作用。如果“name”参数被添加到params中,使其成为必需参数,并且如果没有“name”参数,URL将不再工作。如果“name”参数包含在URL中,同样的模糊错误出现。@M.Deinum不匹配是什么意思?这是一个稍微简化的代码,但实际代码与更多参数相似。太棒了!这是一个简单的解决方案,即使经过几天疯狂的谷歌搜索,我也没有遇到过。我想我的谷歌技能(搜索词组合)需要一点改进。谢谢!太棒了!这么简单的解决方案,我甚至没有遇到f