Je travaille avec le projet de contrôleur Spring MVC. Ci-dessous est mon contrôleur et j'ai un constructeur déclaré que j'utilise spécifiquement à des fins de test.
@Controller
public class TestController {
private static KeeperClient testClient = null;
static {
// some code here
}
/**
* Added specifically for unit testing purpose.
*
* @param testClient
*/
public TestController(KeeperClient testClient) {
TestController.testClient = testClient;
}
// some method here
}
Chaque fois que je démarre le serveur, je suis en dessous de l'exception -
No default constructor found; nested exception is Java.lang.NoSuchMethodException:
Mais si je supprime le constructeur TestController
, cela fonctionne sans problème. Quel mal je fais ici?
Mais si j'ajoute ce constructeur par défaut, il commence à fonctionner correctement -
public TestController() {
}
Vous devez définir no-args ou constructeur par défaut si vous créez votre propre constructeur.
Vous pouvez lire pourquoi le constructeur d'argument par défaut ou aucun n'est requis.
Spring ne peut pas instancier votre TestController car son seul constructeur nécessite un paramètre. Vous pouvez ajouter un constructeur sans argument ou ajouter une annotation @Autowired au constructeur:
@Autowired
public TestController(KeeperClient testClient) {
TestController.testClient = testClient;
}
Dans ce cas, vous dites explicitement à Spring de rechercher dans le contexte d'application un bean KeeperClient et de l'injecter lors de l'instanciation de TestControlller.
Dans mon cas, le printemps a jeté cela parce que j'ai oublié de rendre statique une classe interne.
Lorsque vous avez constaté que cela n'aide pas même à ajouter un constructeur sans argument, veuillez vérifier votre modificateur.
Dans mon cas, j'ai oublié d'ajouter @RequestBody
annotation à l'argument de la méthode:
public TestController(@RequestBody KeeperClient testClient) {
TestController.testClient = testClient;
}