title: Caused by: java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'appController' bean method
body: <p>Good morning all, i'm dealing with an Ambiguous mapping i cannot decode...
  I'm using Spring mvc 4.0.6 and hibernate 4.3.6
  I'm getting this error while launching the war in tomcat:</p>
  
  <pre><code>ERROR [localhost-startStop-2]: Context initialization failed
  org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'appController' bean method 
  public java.lang.String it.besmart.controller.AppController.newClient(org.springframework.ui.ModelMap)
  to {[//new],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}: There is already 'appController' bean method
  public java.lang.String it.besmart.controller.AppController.saveClient(it.besmart.models.Client,org.springframework.validation.BindingResult,org.springframework.ui.ModelMap) mapped.
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
      at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
      at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
      at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
      at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
      at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703)
      at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
      at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
      at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
      at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
      at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
      at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4727)
      at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5167)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
      at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
      at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
      at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
      at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:945)
      at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1768)
      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      at java.lang.Thread.run(Thread.java:744)
  Caused by: java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'appController' bean method 
  public java.lang.String it.besmart.controller.AppController.newClient(org.springframework.ui.ModelMap)
  to {[//new],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}: There is already 'appController' bean method
  public java.lang.String it.besmart.controller.AppController.saveClient(it.besmart.models.Client,org.springframework.validation.BindingResult,org.springframework.ui.ModelMap) mapped.
      at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.registerHandlerMethod(AbstractHandlerMethodMapping.java:192)
      at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.detectHandlerMethods(AbstractHandlerMethodMapping.java:164)
      at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.initHandlerMethods(AbstractHandlerMethodMapping.java:124)
      at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.afterPropertiesSet(AbstractHandlerMethodMapping.java:103)
      at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.afterPropertiesSet(RequestMappingHandlerMapping.java:126)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)
      ... 25 more
  </code></pre>
  
  <p>I can't understand why i'm getting this error. AppController is quite straight</p>
  
  <pre><code>package it.besmart.controller;
  import it.besmart.models.Client;
  import it.besmart.service.ClientService;
  import java.util.List;
  import java.util.Locale;
  import javax.validation.Valid;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.context.MessageSource;
  import org.springframework.stereotype.Controller;
  import org.springframework.ui.ModelMap;
  import org.springframework.validation.BindingResult;
  import org.springframework.validation.FieldError;
  import org.springframework.web.bind.annotation.PathVariable;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RequestMethod;
  
  @Controller
  @RequestMapping("/")
  public class AppController {
  
      @Autowired
      ClientService clientService;
  
      @Autowired
      MessageSource messageSource;
  
      @RequestMapping(value = { "/", "/list" }, method = RequestMethod.GET)
      public String listClients(ModelMap model){
          List&lt;Client&gt; clients = clientService.findAllClients();
          model.addAttribute("clients", clients);
          return "allclients";
      }
  
      @RequestMapping(value = {"/new"}, method = RequestMethod.POST)
      public String newClient(ModelMap model){
          Client client = new Client();
          model.addAttribute("client", client);
          model.addAttribute("edit", false);
          return "registration";
  
      }
  
      @RequestMapping(value = {"/new"}, method = RequestMethod.POST)
      public String saveClient(@Valid Client client, BindingResult result, ModelMap model){
          if(result.hasErrors()){
              return "registration";
          }
  
  
          clientService.saveClient(client);
          model.addAttribute("success", "Client" + client.getNomeClient() + "registrato correttamente");
  
          return "success";
  
      }
  
  
      @RequestMapping(value = { "/edit-{name}-client"}, method = RequestMethod.POST)
      public String updateClient(@Valid Client client, BindingResult result, ModelMap model, @PathVariable String name ){
          if(result.hasErrors()){
              return "registration";
          }
  
          if(!clientService.isClientNameUnique(client.getIdClient(), client.getNomeClient())){
              FieldError idErr = new FieldError("client", "name", messageSource.getMessage("non.unique.nome_client", new String[]{client.getNomeClient()}, Locale.getDefault()));
              result.addError(idErr);
              return "registration";
          }
          clientService.saveClient(client);
          model.addAttribute("success", "Client" + client.getNomeClient() + "aggiornato correttamente");
  
          return "success";
  
      }
  
      @RequestMapping(value = { "/delete-{id}-client" }, method = RequestMethod.GET)
          public String deleteClient(@PathVariable int id){
          clientService.deleteClientById(id);
          return "redirect:/list";
      }
  
  
      }
  </code></pre>
  
  <p>ClientService.java</p>
  
  <pre><code>package it.besmart.service;
  
  import it.besmart.models.Client;
  
  import java.util.List;
  
  public interface ClientService {
  
      Client findById(int id);
  
      void saveClient(Client client);
  
      void updateClient(Client client);
  
      void deleteClientById(int id);
  
      List &lt;Client&gt; findAllClients();
  
      Client findClientByName(String name);
  
      boolean isClientNameUnique(Integer id, String name);
  
  }
  </code></pre>
  
  <p>It looks to me like it's quite straight everything... I'm quite new to this kind of application..
  Thanks</p>