PeaceIsPearl
PeaceIsPearl

Reputation: 339

Spring Boot Rest : Error 404 not found when posting JSON via Postman

I am trying to invoke a POST service via Postman. My application is running on embedded tomcat server. However when I try to invoke the service, the error I get is "No mapping found for HTTP request with URI [/findrouting] in DispatcherServlet with name 'dispatcherServlet'" It is not even recognizing http:localhost:8080/

RoutingRequest and RoutingResponse are the POJOs with getters and setters. Am I missing something here. I did check lots of examples but didn't find any solution to my problem.

Please see my code below :

package com.ab.hello.ambassador.server;

import java.util.Arrays;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.context.ApplicationContext;

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(AmbassadorApplication.class, args);

        System.out.println("List of Beans instantiated");
        String[] beanNames = ctx.getBeanDefinitionNames();
        Arrays.sort(beanNames);
        for (String beanName : beanNames) {
            System.out.println(beanName);
        }
    }
}


package com.ab.hello.ambassador.server.controller;

import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.springframework.web.bind.annotation.RequestMethod.POST;

import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.dp.connect.ambassador.server.RoutingRequest;
import com.dp.connect.ambassador.server.RoutingResponse;

@RestController
public class ApplicationController {

    @RequestMapping("/")
    public String index() {
        return "Spring Boot POC Welcomes You!";
    }


    @RequestMapping(method = POST, value = "/findrouting", consumes = { APPLICATION_JSON_VALUE }, produces = {
            APPLICATION_JSON_VALUE })
    public RoutingResponse findRoute(@RequestBody RoutingRequest request) throws Exception {
        // some business logic that would return response; as of now I have set it to null
        RoutingResponse response = null;
        return response;
    }

}

Upvotes: 0

Views: 17774

Answers (4)

PeaceIsPearl
PeaceIsPearl

Reputation: 339

Thanks for your time. After struggling for quite a long time. I figured out this piece of code. Added annotation @EnableWebMvc. This solved my problem.

@SpringBootApplication
@EnableWebMvc
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }

}

Upvotes: 3

Y.Ido
Y.Ido

Reputation: 343

according to spring docs , seems need to Override a config method:

    @SpringBootApplication
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }

}

Upvotes: 0

Amit Jadhav
Amit Jadhav

Reputation: 123

Change the below line

ApplicationContext ctx = SpringApplication.run(AmbassadorApplication.class, args);

with

ApplicationContext ctx = SpringApplication.run(Application.class, args);

Upvotes: 0

Felipe Mariano
Felipe Mariano

Reputation: 644

Try to define the path in your controller:

@RestController
@RequestMapping("/")
public class ApplicationController {

    @RequestMapping
    public String index() {
        return "Spring Boot POC Welcomes You!";
    }


    @RequestMapping(method = POST, value = "/findrouting", consumes = { APPLICATION_JSON_VALUE }, produces = {
            APPLICATION_JSON_VALUE })
    public RoutingResponse findRoute(@RequestBody RoutingRequest request) throws Exception {
        // some business logic that would return response; as of now I have set it to null
        RoutingResponse response = null;
        return response;
    }

}

Upvotes: 0

Related Questions