title: Spring Boot + Cloud | Zuul Proxy | 404 Error
body: <p>I am using Spring Cloud and Zuul proxy as gateway to my RESTful service.</p>
  
  <p>Gateway Application (Spring Boot web app running on port 8080)  relevant code:-</p>
  
  <p>Main class:-</p>
  
  <pre><code>@SpringBootApplication
  @EnableZuulProxy
  public class WebfrontApplication extends WebMvcConfigurerAdapter {
  
      /**
       * @param args
       */
      public static void main(String[] args) {
          SpringApplication.run(WebfrontApplication.class, args);
      }
  }
  </code></pre>
  
  <p>Zuul Mappings:-</p>
  
  <pre><code>zuul:
    routes:
      customer:
        path: /customer/**
        url: http://localhost:9000/
  </code></pre>
  
  <p>During startup of above UI Gateway application, I can see in my logs that mappings for proxies are registered:-</p>
  
  <pre><code>o.s.c.n.zuul.web.ZuulHandlerMapping      : Mapped URL path [/customer/**] onto handler of type [class org.springframework.cloud.netflix.zuul.web.ZuulController]
  </code></pre>
  
  <p>The REST service (A Spring Boot web app running on port 9000) relevant code:-</p>
  
  <pre><code>@RestController
  @RequestMapping(value = "/customer")
  public class CustomerController {
  
      @Autowired
      private CustomerService customerService;
  
      /**
       * Get List of All customers.
       * 
       * @return
       */
      @RequestMapping(value = "/list", method = RequestMethod.GET)
      public List&lt;Customer&gt; list(Principal principal) {
          return customerService.list();
      }
  }
  </code></pre>
  
  <p>Using a rest client (POSTMAN in my case) I am able to get response from above endpoint successfully (after taking care of auth token).</p>
  
  <p>I am using AngularJS for in UI application to get data from the REST endpoint.</p>
  
  <p>Relevant code:-</p>
  
  <pre><code>angular.module('customerModule').factory('customerService',function($http) {
  
      return {
          customerList : function(){
              // PROBLEM !!!!!
              // THIS CALL GIVES A 404 ERROR
              return $http.get('/customer/list');
          }
      };
  });
  </code></pre>
  
  <p>The above call is giving back a 404 error:-
  This is what my Chrome debugger shows:-</p>
  
  <pre><code>Remote Address:127.0.0.1:8080
  Request URL:http://localhost:8080/customer/list
  Request Method:GET
  Status Code:404 Not Found
  </code></pre>
  
  <p>Request Headers:-</p>
  
  <pre><code>Accept:application/json, text/plain, */*
  Accept-Encoding:gzip, deflate, sdch
  Accept-Language:en-US,en;q=0.8,hi;q=0.6,ms;q=0.4
  Cache-Control:no-cache
  Connection:keep-alive
  Cookie:SESSION=2e1ac330-fe41-4ff4-8efb-81eaec12c8d1
  Host:localhost:8080
  Pragma:no-cache
  Referer:http://localhost:8080/
  User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36
  X-Auth-Token:2e1ac330-fe41-4ff4-8efb-81eaec12c8d1
  </code></pre>
  
  <p>Response Headers:-</p>
  
  <pre><code>Cache-Control:no-cache, no-store, max-age=0, must-revalidate
  Content-Type:application/json; charset=UTF-8
  Date:Fri, 20 Mar 2015 04:00:36 GMT
  Date:Fri, 20 Mar 2015 04:00:36 GMT
  Expires:0
  Pragma:no-cache
  Pragma:no-cache
  Server:Jetty(9.2.9.v20150224)
  Transfer-Encoding:chunked
  X-Application-Context:bootstrap
  X-Content-Type-Options:nosniff
  X-Content-Type-Options:nosniff
  X-Frame-Options:DENY
  X-Frame-Options:DENY
  X-XSS-Protection:1; mode=block
  X-XSS-Protection:1; mode=block
  </code></pre>
  
  <p>What's is wrong here ? Are mappings incorrect or am I missing something else?</p>
  
  <p><strong>SOLVED</strong></p>
  
  <p>As per the accepted answer, changing the Zuul mapping worked when changed to:-</p>
  
  <pre><code>zuul:
   routes:
    resource:
     path: /customer/**
     url: http://localhost:9000/
     stripPrefix: false
  </code></pre>