Étendre annoté contrôleurs Spring MVC
je suis en train de travailler sur un petit projet et d'avoir le code existant qui je veux maintenir la propreté de mes modifications, et j'ai donc besoin de prolonger un annotée contrôleur, mais cela ne fonctionne pas:
package a;
@controller
public class BaseController {
//Autowired fields
protected x toExtend() {
//do stuff
}
@RequestMapping(value = "/start")
protected ModelAndView setupForm(...) {
toExtend();
//more stuff
}
}
package b;
@controller
public class NewController extends BaseController {
//Autowired fields
@Override
protected x toExtend() {
super.toExtend();
//new stuff
}
}
Paquet a et b sont analysés pour les contrôleurs et je cannont changer cela. Je n'ai pas vraiment s'attendre à ce que cela fonctionne parce que le @RequestMapping(valeur = "/start") est redondante dans les deux contrôleurs. Et j'obtiens une exception à cause de cela.
Donc ma question est de savoir si, effectivement, il est possible d'étendre une annotation piloté par le contrôleur comme ça, sans modification de la BaseController?
Cela devrait fonctionner si vous supprimez
Vous ne devriez pas avoir
oui vous avez raison c'est un copier coller d'erreur et je l'ai montée.
@Controller
d'annotation à partir de votre BaseController
, sauf s'il y a une raison pour s'y maintenir.Vous ne devriez pas avoir
super.toExtend();
dans votre classe de base. Il n'y a pas de super
méthode appelée toExtend()
depuis la classe parent est Object
.oui vous avez raison c'est un copier coller d'erreur et je l'ai montée.
OriginalL'auteur Dennis Ich | 2013-04-09
Vous devez vous connecter pour publier un commentaire.
Vous pouvez étendre un ressort de contrôleur par un autre printemps contrôleur.
Lorsqu'un contrôleur Spring MVC s'étend un autre Contrôleur, la fonctionnalité du contrôleur de base peut être utilisé directement par le contrôleur enfant à l'aide de l'URL de la requête de l'enfant contrôleur. Vous pouvez obtenir plus de détails ici L'extension de Printemps contrôleurs
OriginalL'auteur Ketan
Si
BaseController
'annotation ne peut pas être supprimé, vous pouvez utiliser L'Adaptateur pour obtenir l'héritage.Dans les cas habituels, soit
BaseController
n'a pas@Controller
annotation, donc souvent, contrôleur de méthodes peuvent être mis à l'intérieur deBaseController
être prolongée par réelle contrôleursOriginalL'auteur sanbhat