При запуске Spring-приложения выдает ошибку

Ошибка при запуске приложения: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource

import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
//import com.github.steed777.model.CancelledCertificates;
//import com.github.steed777.model.ChangeFIOFilter;
import com.github.steed777.model.ForeignLawyer;
import com.github.steed777.model.Lawyers;
//import com.github.steed777.service.CancelledCertificatesService;
//import com.github.steed777.service.ChangeFIOFilterService;
import com.github.steed777.service.ForeignLawyerService;
import com.github.steed777.service.LawyersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.stereotype.Controller;

import javax.persistence.Table;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

@Controller
public class MainController {

    @Autowired
    private LawyersService lawyerService;
  //  @Autowired
  //  private ChangeFIOFilterService changeFioFilterService;
    @Autowired
   private ForeignLawyerService foreignLawyerService;
  //  @Autowired
//   private CancelledCertificatesService cancelledCertificatesService;

    @Value("${db.url}")
    private String exportDirPath;

    @GetMapping(value = "/")
    public void export() {
        try {
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy-Hms");
            final String dbFile = sdf.format(date) + "-lawyers.json";
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
            final JsonNodeFactory factory = JsonNodeFactory.instance;
            final ObjectNode node = factory.objectNode();

            List<Lawyers> lawyers = lawyerService.findForExport();
        //    List<ChangeFIOFilter> changeFioFilters = changeFioFilterService.findForExport();
            List<ForeignLawyer> foreignLawyers = foreignLawyerService.findForExport();
         //   List<CancelledCertificates> cancelledCertificates = cancelledCertificatesService.findForExport();

            ArrayNode nodeLawyers = objectMapper.valueToTree(lawyers);
         //   ArrayNode nodeChangeFioFilters = objectMapper.valueToTree(changeFioFilters);
            ArrayNode nodeForeignLawyers = objectMapper.valueToTree(foreignLawyers);
         //  ArrayNode nodeCancelledCertificates = objectMapper.valueToTree(cancelledCertificates);

            node.set(Lawyers.class.getAnnotation(Table.class).name(), nodeLawyers);
       //     node.set(ChangeFIOFilter.class.getAnnotation(Table.class).name(), nodeChangeFioFilters);
           node.set(ForeignLawyer.class.getAnnotation(Table.class).name(), nodeForeignLawyers);
        //    node.set(CancelledCertificates.class.getAnnotation(Table.class).name(), nodeCancelledCertificates);
            objectMapper.writeValue(new File(exportDirPath, dbFile), node);
        } catch (JsonGenerationException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.1.RELEASE)

2020-03-06 12:21:16.782  INFO 5512 --- [           main] com.github.steed777.Main                 : Starting Main on RUMSCWS207 with PID 5512 (C:\Users\Senko_KL\IdeaProjects\converttabletojson\target\classes started by Senko_KL in C:\Users\Senko_KL\IdeaProjects\converttabletojson)
2020-03-06 12:21:16.787  INFO 5512 --- [           main] com.github.steed777.Main                 : No active profile set, falling back to default profiles: default
2020-03-06 12:21:17.775  INFO 5512 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2020-03-06 12:21:17.861  INFO 5512 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 74ms. Found 2 repository interfaces.
2020-03-06 12:21:18.383  INFO 5512 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-03-06 12:21:18.628  INFO 5512 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-03-06 12:21:18.637  INFO 5512 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-03-06 12:21:18.637  INFO 5512 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.27]
2020-03-06 12:21:18.754  INFO 5512 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-03-06 12:21:18.754  INFO 5512 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1877 ms
2020-03-06 12:21:18.818  INFO 5512 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2020-03-06 12:21:19.013  INFO 5512 --- [           main] com.zaxxer.hikari.pool.PoolBase          : HikariPool-1 - Driver does not support get/set network timeout for connections. (Not yet implemented.)
2020-03-06 12:21:19.016  INFO 5512 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2020-03-06 12:21:19.074  INFO 5512 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2020-03-06 12:21:19.147  INFO 5512 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.4.12.Final
2020-03-06 12:21:19.318  INFO 5512 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2020-03-06 12:21:19.638  INFO 5512 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.FirebirdDialect
2020-03-06 12:21:22.238  INFO 5512 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2020-03-06 12:21:22.245  INFO 5512 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2020-03-06 12:21:22.745  WARN 5512 --- [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2020-03-06 12:21:22.855  INFO 5512 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-03-06 12:21:22.905  WARN 5512 --- [           main] ConfigServletWebServerApplicationContext : 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 'mainController' method 
com.github.steed777.controller.MainController#export()
to {GET /}: There is already 'fileUploadController' bean method
com.github.steed777.controller.FileUploadController#listUploadedFiles(Model) mapped.
2020-03-06 12:21:22.905  INFO 5512 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
2020-03-06 12:21:22.906  INFO 5512 --- [           main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2020-03-06 12:21:22.907  INFO 5512 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2020-03-06 12:21:23.170  INFO 5512 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
2020-03-06 12:21:23.174  INFO 5512 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2020-03-06 12:21:23.190  INFO 5512 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-03-06 12:21:23.201 ERROR 5512 --- [           main] o.s.boot.SpringApplication               : 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 'mainController' method 
com.github.steed777.controller.MainController#export()
to {GET /}: There is already 'fileUploadController' bean method
com.github.steed777.controller.FileUploadController#listUploadedFiles(Model) mapped.
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1803) ~[spring-beans-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) ~[spring-beans-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:879) ~[spring-beans-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) ~[spring-context-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.1.RELEASE.jar:2.2.1.RELEASE]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) [spring-boot-2.2.1.RELEASE.jar:2.2.1.RELEASE]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.2.1.RELEASE.jar:2.2.1.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.2.1.RELEASE.jar:2.2.1.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.2.1.RELEASE.jar:2.2.1.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.2.1.RELEASE.jar:2.2.1.RELEASE]
	at com.github.steed777.Main.main(Main.java:12) [classes/:na]
Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'mainController' method 
com.github.steed777.controller.MainController#export()
to {GET /}: There is already 'fileUploadController' bean method
com.github.steed777.controller.FileUploadController#listUploadedFiles(Model) mapped.
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry.validateMethodMapping(AbstractHandlerMethodMapping.java:633) ~[spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry.register(AbstractHandlerMethodMapping.java:600) ~[spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.registerHandlerMethod(AbstractHandlerMethodMapping.java:318) ~[spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.registerHandlerMethod(RequestMappingHandlerMapping.java:350) ~[spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.registerHandlerMethod(RequestMappingHandlerMapping.java:67) ~[spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lambda$detectHandlerMethods$1(AbstractHandlerMethodMapping.java:288) ~[spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at java.util.LinkedHashMap.forEach(LinkedHashMap.java:684) ~[na:1.8.0_241]
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.detectHandlerMethods(AbstractHandlerMethodMapping.java:286) ~[spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.processCandidateBean(AbstractHandlerMethodMapping.java:258) ~[spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.initHandlerMethods(AbstractHandlerMethodMapping.java:217) ~[spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.afterPropertiesSet(AbstractHandlerMethodMapping.java:205) ~[spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.afterPropertiesSet(RequestMappingHandlerMapping.java:171) ~[spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1862) ~[spring-beans-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1799) ~[spring-beans-5.2.1.RELEASE.jar:5.2.1.RELEASE]
	... 16 common frames omitted


Ответы (1 шт):

Автор решения: StateItPrimitive

В чем проблема:

В вашем приложении методы двух разных Controller'ов пытаются "мапиться" на один и тот же HTTP path /, используя один и тот же HTTP method GET:

com.github.steed777.controller.MainController#export()
com.github.steed777.controller.FileUploadController#listUploadedFiles(Model)

Способы решения:

Решить проблему можно одним из следующих способов:

  1. изменением корневых path'ов на уровне ваших Controller'ов (MainController и FileUploadController).
  2. уровне вышеуказанных java method'ов (export и listUploadedFiles) изменить:
    1. используемые HTTP path'ы (например, на одном из них изменить / на иной);
    2. используемые HTTP method'ы (на одном из них изменить GET на иной, например, на POST).

Мне кажется, что в вашем случае, вам логичнее придерживаться первого варианта решения проблемы, например, так:

@Controller("/first/root/path")
MainController

и так

@Controller("/second/root/path")
FileUploadController

Конечно же, /first/root/path и /second/root/path вы уж сами придумайте.

→ Ссылка