【问题标题】:Ambiguous Mapping模糊映射
【发布时间】:2021-09-16 05:26:48
【问题描述】:

我正在尝试使用 springboot web、带有 SQlite 数据库的 spring data JPA 和 Spring thymleaf 构建问题跟踪系统。但是,当我尝试运行我的应用程序时,我不断遇到以下错误。

 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
[32m :: Spring Boot :: [39m              [2m (v2.5.2)[0;39m

[2m2021-07-05 12:42:54.284[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mc.i.app.IssueTrackingApplication        [0;39m [2m:[0;39m Starting IssueTrackingApplication using Java 15.0.2 on User with PID 16980 (C:\Users\26097\Documents\workspace-spring-tool-suite projects\IssueTracking\target\classes started by 26097 in C:\Users\26097\Documents\workspace-spring-tool-suite projects\IssueTracking)
[2m2021-07-05 12:42:54.284[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mc.i.app.IssueTrackingApplication        [0;39m [2m:[0;39m No active profile set, falling back to default profiles: default
[2m2021-07-05 12:42:54.786[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36m.s.d.r.c.RepositoryConfigurationDelegate[0;39m [2m:[0;39m Bootstrapping Spring Data JPA repositories in DEFAULT mode.
[2m2021-07-05 12:42:54.823[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36m.s.d.r.c.RepositoryConfigurationDelegate[0;39m [2m:[0;39m Finished Spring Data repository scanning in 35 ms. Found 2 JPA repository interfaces.
[2m2021-07-05 12:42:55.214[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mo.s.b.w.embedded.tomcat.TomcatWebServer [0;39m [2m:[0;39m Tomcat initialized with port(s): 8080 (http)
[2m2021-07-05 12:42:55.215[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mo.apache.catalina.core.StandardService  [0;39m [2m:[0;39m Starting service [Tomcat]
[2m2021-07-05 12:42:55.216[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36morg.apache.catalina.core.StandardEngine [0;39m [2m:[0;39m Starting Servlet engine: [Apache Tomcat/9.0.48]
[2m2021-07-05 12:42:55.277[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mo.a.c.c.C.[Tomcat].[localhost].[/]      [0;39m [2m:[0;39m Initializing Spring embedded WebApplicationContext
[2m2021-07-05 12:42:55.279[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mw.s.c.ServletWebServerApplicationContext[0;39m [2m:[0;39m Root WebApplicationContext: initialization completed in 988 ms
[2m2021-07-05 12:42:55.382[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mo.hibernate.jpa.internal.util.LogHelper [0;39m [2m:[0;39m HHH000204: Processing PersistenceUnitInfo [name: default]
[2m2021-07-05 12:42:55.395[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mcom.zaxxer.hikari.HikariDataSource      [0;39m [2m:[0;39m HikariPool-2 - Starting...
[2m2021-07-05 12:42:55.404[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mcom.zaxxer.hikari.HikariDataSource      [0;39m [2m:[0;39m HikariPool-2 - Start completed.
[2m2021-07-05 12:42:55.407[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36morg.hibernate.dialect.Dialect           [0;39m [2m:[0;39m HHH000400: Using dialect: com.issuetracking.app.SQLDialect
[2m2021-07-05 12:42:55.504[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mo.h.e.t.j.p.i.JtaPlatformInitiator      [0;39m [2m:[0;39m HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
[2m2021-07-05 12:42:55.505[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mj.LocalContainerEntityManagerFactoryBean[0;39m [2m:[0;39m Initialized JPA EntityManagerFactory for persistence unit 'default'
[2m2021-07-05 12:42:55.780[0;39m [33m WARN[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mConfigServletWebServerApplicationContext[0;39m [2m:[0;39m Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'equipmentController' method 
com.issuetracking.app.controllers.EquipmentController#addEquipment(Model)
to {GET [/equipment]}: There is already 'equipmentController' bean method
com.issuetracking.app.controllers.EquipmentController#listEquipment(Model) mapped.
[2m2021-07-05 12:42:55.781[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mj.LocalContainerEntityManagerFactoryBean[0;39m [2m:[0;39m Closing JPA EntityManagerFactory for persistence unit 'default'
[2m2021-07-05 12:42:55.782[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mcom.zaxxer.hikari.HikariDataSource      [0;39m [2m:[0;39m HikariPool-2 - Shutdown initiated...
[2m2021-07-05 12:42:55.785[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mcom.zaxxer.hikari.HikariDataSource      [0;39m [2m:[0;39m HikariPool-2 - Shutdown completed.
[2m2021-07-05 12:42:55.786[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mo.apache.catalina.core.StandardService  [0;39m [2m:[0;39m Stopping service [Tomcat]
[2m2021-07-05 12:42:55.800[0;39m [32m INFO[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mConditionEvaluationReportLoggingListener[0;39m [2m:[0;39m 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
[2m2021-07-05 12:42:55.853[0;39m [31mERROR[0;39m [35m16980[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mo.s.boot.SpringApplication              [0;39m [2m:[0;39m Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'equipmentController' method 
com.issuetracking.app.controllers.EquipmentController#addEquipment(Model)
to {GET [/equipment]}: There is already 'equipmentController' bean method
com.issuetracking.app.controllers.EquipmentController#listEquipment(Model) mapped.
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786) ~[spring-beans-5.3.8.jar:5.3.8]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[spring-beans-5.3.8.jar:5.3.8]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.8.jar:5.3.8]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.8.jar:5.3.8]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.8.jar:5.3.8]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.8.jar:5.3.8]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.8.jar:5.3.8]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.8.jar:5.3.8]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.8.jar:5.3.8]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.8.jar:5.3.8]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.5.2.jar:2.5.2]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-2.5.2.jar:2.5.2]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-2.5.2.jar:2.5.2]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) ~[spring-boot-2.5.2.jar:2.5.2]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-2.5.2.jar:2.5.2]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[spring-boot-2.5.2.jar:2.5.2]
    at com.issuetracking.app.IssueTrackingApplication.main(IssueTrackingApplication.java:10) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.5.2.jar:2.5.2]
Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'equipmentController' method 
com.issuetracking.app.controllers.EquipmentController#addEquipment(Model)
to {GET [/equipment]}: There is already 'equipmentController' bean method
com.issuetracking.app.controllers.EquipmentController#listEquipment(Model) mapped.
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry.validateMethodMapping(AbstractHandlerMethodMapping.java:663) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry.register(AbstractHandlerMethodMapping.java:629) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.registerHandlerMethod(AbstractHandlerMethodMapping.java:328) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.registerHandlerMethod(RequestMappingHandlerMapping.java:395) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.registerHandlerMethod(RequestMappingHandlerMapping.java:76) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lambda$detectHandlerMethods$2(AbstractHandlerMethodMapping.java:298) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:723) ~[na:na]
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.detectHandlerMethods(AbstractHandlerMethodMapping.java:296) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.processCandidateBean(AbstractHandlerMethodMapping.java:265) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.initHandlerMethods(AbstractHandlerMethodMapping.java:224) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.afterPropertiesSet(AbstractHandlerMethodMapping.java:212) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.afterPropertiesSet(RequestMappingHandlerMapping.java:206) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1845) ~[spring-beans-5.3.8.jar:5.3.8]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-5.3.8.jar:5.3.8]
    ... 21 common frames omitted

这是我的控制器,它由处理已输入表单的数据的处理程序方法组成,一个列出数据库中存在的设备详细信息,一个使我们能够添加设备详细信息使用表单在数据库中。

package com.issuetracking.app.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;

import com.issuetracking.app.enitities.Equipment;
import com.issuetracking.app.services.EquipmentService;

@Controller
public class EquipmentController {

    private EquipmentService equipmentService;

    public EquipmentController(EquipmentService equipmentService) {
        super();
        this.equipmentService = equipmentService;
    } 
    
    @GetMapping("/equipment")
    public String listEquipment(Model model) {
        model.addAttribute("equipment",equipmentService.getAllEquipment()); 
        return "equipment";
    }
    
    @GetMapping("/equipment")
    public String addEquipment(Model model) {
         Equipment equipment = new Equipment();
        model.addAttribute("equipment", equipment); 
        return "equipment"; 
    }
    
    @PostMapping("/equipment")
    public String saveEquipment(@ModelAttribute("equipment") Equipment equipment) {
    equipmentService.saveEquipment(equipment); 
    return "redirect:/equipment"; 
    }
    
}

我哪里错了?

【问题讨论】:

    标签: java spring-boot sqlite


    【解决方案1】:

    您有多个具有相同 url 的方法。更改其中任何一个即可。

    GetMapping("/equipment") 映射到2个方法。

    【讨论】:

      【解决方案2】:

      您正在使用相同的 URL 映射 3 次,请尝试使用另一个 URL 来映射每种方法的三个

       @GetMapping("/equipment")
          public String listEquipment(Model model) {
              model.addAttribute("equipment",equipmentService.getAllEquipment()); 
              return "equipment";
          }
          
      
          @GetMapping("/equipment")
          public String addEquipment(Model model) {
               Equipment equipment = new Equipment();
              model.addAttribute("equipment", equipment); 
              return "equipment"; 
          }
      
       @PostMapping("/equipment")
          public String saveEquipment(@ModelAttribute("equipment") Equipment equipment) {
          equipmentService.saveEquipment(equipment); 
          return "redirect:/equipment"; 
          }
      

      【讨论】:

      • 试过这样做,现在当我尝试提交表单时,会出现以下错误:已解决 [org.springframework.beans.TypeMismatchException: 无法将“java.lang.String”类型的值转换为必需类型“com.issuetracking.app.enitities.Equipment”;嵌套异常是 org.springframework.core.convert.ConversionFailedException:无法将值“lights”从类型 [java.lang.String] 转换为类型 [java.lang.Integer];嵌套异常是 java.lang.NumberFormatException: For input string: "lights"]
      • @cool_Jay 在表单中插入“灯”的任何位置,确保数据类型的字段是实体类中的字符串
      • 它是一个String 它是这样写的 @Column(name="Name_of_equipment") private String 设备;
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      相关资源
      最近更新 更多