Ich benutze Spring 2.5 und verwende Anmerkungen, um meine Controller zu konfigurieren. Mein Controller funktioniert einwandfrei, wenn ich keine zusätzlichen Schnittstellen implementiere, aber der Spring-Container erkennt das Controller/Request-Mapping nicht, wenn ich Schnittstellenimplementierungen hinzufüge.Kommentierter Spring-MVC-Controller wird nicht erkannt, wenn der Controller die Schnittstelle erweitert
Ich kann nicht herausfinden, warum das Hinzufügen einer Schnittstellenimplementierung die Konfiguration des Controllers und die Anforderungszuordnungen durcheinander bringt. Irgendwelche Ideen?
Also, das funktioniert:
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;
}
}
aber nicht:
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;
}
}
ich sollte fügen Sie hinzu, dass Controller in meinem Frühjahr Kontext config registriert sind: und die Verwendung von DefaultAnnotationHandlerMapping und AnnotationMethodHa ndlerAdapter –
layne
Es sieht nicht so aus, als ob Sie den ValidatingController importieren - was ist der voll qualifizierte Klassenname? –
Ich importiere es. Es befindet sich im selben Paket wie das obige Controller-Beispiel. Ich sollte hinzufügen, dass der obige Code funktioniert, wenn ich die ValidatingController-Basisklasse erweitere, aber wenn ich ValidatingController als Schnittstelle codiere und RegistrationController es implementiere, dann bricht es ab. – layne