No default constructor found; nested exception is java.lang.NoSuchMethodException with Spring MVC?

118,647

Solution 1

You must have to define no-args or default constructor if you are creating your own constructor.

You can read why default or no argument constructor is required.

why-default-or-no-argument-constructor-java-class.html

Solution 2

Spring cannot instantiate your TestController because its only constructor requires a parameter. You can add a no-arg constructor or you add @Autowired annotation to the constructor:

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

In this case, you are explicitly telling Spring to search the application context for a KeeperClient bean and inject it when instantiating the TestControlller.

Solution 3

In my case, spring threw this because i forgot to make an inner class static.

When you found that it doesnt help even adding a no-arg constructor, please check your modifier.

Solution 4

In my case I forgot to add @RequestBody annotation to the method argument:

public TestController(@RequestBody KeeperClient testClient) {
        TestController.testClient = testClient;
    }
Share:
118,647
john
Author by

john

Updated on July 07, 2020

Comments

  • john
    john almost 4 years

    I am working with Spring MVC controller project. Below is my Controller and I have a constructor declared which I am specifically using for testing purpose.

    @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
    
    }
    

    Whenever I am starting the server, I am getting below exception -

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

    But if I remove TestController constructor then it works fine without any problem. What wrong I am doing here?

    But if I add this default constructor then it starts working fine -

        public TestController() {
    
        }