Ответ 1
Вам нужно определить конструктор no-args или default, если вы создаете свой собственный конструктор.
Вы можете прочитать, почему требуется конструктор аргументов default или no.
Я работаю с проектом Spring MVC controller. Ниже мой контроллер, и у меня есть конструктор, который я специально использую для целей тестирования.
@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() {
}
Вам нужно определить конструктор no-args или default, если вы создаете свой собственный конструктор.
Вы можете прочитать, почему требуется конструктор аргументов default или no.
Spring не может создать экземпляр вашего TestController, потому что для его единственного конструктора требуется параметр. Вы можете добавить конструктор no-arg или добавить в конструктор @Autowired аннотацию:
@Autowired
public TestController(KeeperClient testClient) {
TestController.testClient = testClient;
}
В этом случае вы явно указываете Spring искать контекст приложения для KeeperClient bean и вводить его при создании экземпляра TestControlller.
В моем случае, spring бросил это, потому что я забыл сделать внутренний класс статическим.
Когда вы обнаружили, что это не помогает даже добавить конструктор no-arg, проверьте свой модификатор.
В моем случае я забыл добавить аннотацию @RequestBody
к аргументу метода:
public TestController(@RequestBody KeeperClient testClient) {
TestController.testClient = testClient;
}