Конструктор по умолчанию не найден; вложенным исключением является java.ленг.NoSuchMethodException с весенним MVC?

Я работаю с проектом контроллера Spring MVC. Ниже приведен мой контроллер, и у меня объявлен конструктор, который я специально использую для тестирования.

@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

}

всякий раз, когда я запускаю сервер, я получаю ниже исключения -

No default constructor found; nested exception is java.lang.NoSuchMethodException:

но если я удалить TestController конструктор, то он работает отлично без каких либо проблем. Что я здесь делаю не так?

но если я добавлю этот конструктор по умолчанию, то он начнет работать нормально -

    public TestController() {

    }

3 ответов


вы должны определить no-args или конструктор по умолчанию, если вы создаете свой собственный конструктор.

вы можете прочитать, Почему по умолчанию или не требуется конструктор аргументов.

why-default-or-no-argument-конструктор-java-класс.HTML-код


Spring не может создать экземпляр вашего TestController, потому что его единственный конструктор требует параметра. Вы можете добавить конструктор no-arg или добавить аннотацию @Autowired в конструктор:

@Autowired
public TestController(KeeperClient testClient) {
    TestController.testClient = testClient;
}

в этом случае вы явно говорите Spring искать контекст приложения для компонента KeeperClient и вводить его при создании экземпляра TestControlller.


в моем случае весна бросила это, потому что я забыл сделать статический внутренний класс.

когда вы обнаружили, что это не помогает даже добавить конструктор no-arg, проверьте свой модификатор.