title: Annotated Spring-MVC controller not recognized when controller extends interface
body: <p>I'm using spring 2.5, and am using annotations to configure my controllers.  My controller works fine if I do not implement any additional interfaces, but the spring container doesn't recognize the controller/request mapping when I add interface implementations.</p>
  
  <p>I can't figure out why adding an interface implementation messes up the configuration of the controller and the request mappings.  Any ideas?</p>
  
  <p>So, this works:</p>
  
  <pre><code>package com.shaneleopard.web.controller;
  
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.security.providers.encoding.Md5PasswordEncoder;
  import org.springframework.stereotype.Controller;
  import org.springframework.validation.Errors;
  import org.springframework.validation.Validator;
  import org.springframework.web.bind.annotation.ModelAttribute;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RequestMethod;
  
  import com.shaneleopard.model.User;
  import com.shaneleopard.service.UserService;
  import com.shaneleopard.validator.RegistrationValidator;
  import com.shaneleopard.web.command.RegisterCommand;
  
  @Controller
  public class RegistrationController {
  
      @Autowired
      private UserService userService;
  
      @Autowired
      private Md5PasswordEncoder passwordEncoder;
  
      @Autowired
      private RegistrationValidator registrationValidator;
  
      @RequestMapping( method = RequestMethod.GET, value = "/register.html" )
      public void registerForm(@ModelAttribute RegisterCommand registerCommand) {
          // no op
      }
  
      @RequestMapping( method = RequestMethod.POST, value = "/register.html" )
      public String registerNewUser( @ModelAttribute RegisterCommand command,
              Errors errors ) {
          String returnView = "redirect:index.html";
  
          if ( errors.hasErrors() ) {
              returnView = "register";
          } else {
              User newUser = new User();
              newUser.setUsername( command.getUsername() );
              newUser.setPassword( passwordEncoder.encodePassword( command
                      .getPassword(), null ) );
              newUser.setEmailAddress( command.getEmailAddress() );
              newUser.setFirstName( command.getFirstName() );
              newUser.setLastName( command.getLastName() );
  
              userService.registerNewUser( newUser );
          }
          return returnView;
  
      }
  
      public Validator getValidator() {
          return registrationValidator;
      }
  }
  </code></pre>
  
  <p>but this doesn't:</p>
  
  <pre><code>package com.shaneleopard.web.controller;
  
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.security.providers.encoding.Md5PasswordEncoder;
  import org.springframework.stereotype.Controller;
  import org.springframework.validation.Errors;
  import org.springframework.validation.Validator;
  import org.springframework.web.bind.annotation.ModelAttribute;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RequestMethod;
  
  import com.shaneleopard.model.User;
  import com.shaneleopard.service.UserService;
  import com.shaneleopard.validator.RegistrationValidator;
  import com.shaneleopard.web.command.RegisterCommand;
  
  @Controller
  public class RegistrationController extends ValidatingController {
  
      @Autowired
      private UserService userService;
  
      @Autowired
      private Md5PasswordEncoder passwordEncoder;
  
      @Autowired
      private RegistrationValidator registrationValidator;
  
      @RequestMapping( method = RequestMethod.GET, value = "/register.html" )
      public void registerForm(@ModelAttribute RegisterCommand registerCommand) {
          // no op
      }
  
      @RequestMapping( method = RequestMethod.POST, value = "/register.html" )
      public String registerNewUser( @ModelAttribute RegisterCommand command,
              Errors errors ) {
          String returnView = "redirect:index.html";
  
          if ( errors.hasErrors() ) {
              returnView = "register";
          } else {
              User newUser = new User();
              newUser.setUsername( command.getUsername() );
              newUser.setPassword( passwordEncoder.encodePassword( command
                      .getPassword(), null ) );
              newUser.setEmailAddress( command.getEmailAddress() );
              newUser.setFirstName( command.getFirstName() );
              newUser.setLastName( command.getLastName() );
  
              userService.registerNewUser( newUser );
          }
          return returnView;
  
      }
  
      public Validator getValidator() {
          return registrationValidator;
      }
  }
  </code></pre>