7

Tôi đang sử dụng Spring Cloud và Zuul proxy làm cổng vào dịch vụ RESTful của mình.Khởi động mùa xuân + Đám mây | Zuul Proxy | Lỗi 404

Cổng ứng dụng (Spring Boot ứng dụng web chạy trên cổng 8080) mã có liên quan: -

lớp chính: -

@SpringBootApplication 
@EnableZuulProxy 
public class WebfrontApplication extends WebMvcConfigurerAdapter { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     SpringApplication.run(WebfrontApplication.class, args); 
    } 

}

Zuul Mappings: -

zuul: 
    routes: 
    customer: 
     path: /customer/** 
     url: http://localhost:9000/ 

Khi khởi động ứng dụng UI Gateway ở trên, tôi có thể thấy trong nhật ký của mình ánh xạ cho prox ies được đăng ký: -

o.s.c.n.zuul.web.ZuulHandlerMapping  : Mapped URL path [/customer/**] onto handler of type [class org.springframework.cloud.netflix.zuul.web.ZuulController] 

Các dịch vụ REST (A khởi động mùa xuân ứng dụng web chạy trên cổng 9000) mã có liên quan: -

@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<Customer> list(Principal principal) { 
     return customerService.list(); 
    } 
} 

Sử dụng một khách hàng còn lại (Postman trong trường hợp của tôi) Tôi có thể để nhận phản hồi từ điểm cuối ở trên thành công (sau khi chăm sóc mã thông báo xác thực).

Tôi đang sử dụng AngularJS trong ứng dụng giao diện người dùng để lấy dữ liệu từ điểm cuối REST.

mã có liên quan: -

angular.module('customerModule').factory('customerService',function($http) { 

    return { 
     customerList : function(){ 
      // PROBLEM !!!!! 
      // THIS CALL GIVES A 404 ERROR 
      return $http.get('/customer/list'); 
     } 
    }; 
}); 

Cuộc gọi trên được đưa ra sau một lỗi 404: - Đây là những gì debugger Chrome của tôi cho thấy: - Headers

Remote Address:127.0.0.1:8080 
Request URL:http://localhost:8080/customer/list 
Request Method:GET 
Status Code:404 Not Found 

Yêu cầu: -

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 

Tiêu đề phản hồi: -

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 

Có gì sai ở đây? Ánh xạ không chính xác hay tôi thiếu cái gì khác?

SOLVED

Theo câu trả lời được chấp nhận, thay đổi ánh xạ Zuul làm việc khi thay đổi: -

zuul: 
routes: 
    resource: 
    path: /customer/** 
    url: http://localhost:9000/ 
    stripPrefix: false 
+0

tôi sau blog của Dave Syer của từ đây: http://spring.io/blog/2015/01/12/spring-and-angular-js-an-an-đơn-trang-ứng dụng –

Trả lời

7

Không có bản đồ cho "/ danh sách" trên máy chủ tài nguyên (vì vậy nó một 404). Bạn cần phải đặt stripPrefix = false trên khai báo tuyến đường của bạn hoặc thay đổi ánh xạ yêu cầu trên chương trình phụ trợ thành "/".

+0

Tôi đang gặp vấn đề tương tự. Chỉ trong trường hợp của tôi, nó cho tôi một 405 (Không được phép) khi 'POST'ing, nhưng' GET' hoạt động tốt. Bạn có thể giúp với điều này? – cst1992

-1

Bạn cũng có thể thử các cấu hình sau đây nếu bạn không muốn thiết lập các stripPrefix tài sản:

zuul: 
    routes: 
    customer: 
     path: /customer/** 
     url: http://localhost:9000/customer 
Các vấn đề liên quan