2015-05-05 17 views
16

Tôi đang sử dụng khung công tác MVC mùa xuân. Tôi muốn đăng nhập trạng thái lỗi bất cứ khi nào ngoại lệ được ném, vì vậy phương pháp afterCompletion được sử dụng trong HanlderInterceptor.HandlerInterceptor.afterCompletion() trong mùa xuân MVC thay đổi mã phản hồi

@Override 
public void afterCompletion(final HttpServletRequest request, final HttpServletResponse response, final Object handler, final Exception ex) 
{ 
    final int responseCode = response.getStatus(); 
    s_logger_error.error("status code: " + responseCode); 
} 

Mã này hoạt động tốt nếu tôi chạy ứng dụng này như một ứng dụng trên máy cục bộ. Nhưng khi chúng tôi lưu trữ nó trên máy chủ cầu cảng, giao diện người dùng nhận được phản hồi lỗi chính xác (Trong trường hợp của tôi 409), nhưng trong phương pháp này, nó được ghi lại là 200.

[Hình ảnh từ debug từ xa vị trí hiển thị status=200 nhưng trong phản ứng đó là 409] enter image description here

Ai đó có thể giúp đỡ để tìm ra lý do tại sao có sự thay đổi trong mã phản hồi?

Tôi đang sử dụng chạy nước rút 1.1.7.RELEASE phiên bản khởi động mùa xuân và cầu nối-phân phối-9.2.10.v20150310.

+0

Mã trạng thái 409 ở đâu? Có thể nó được đặt sau trạng thái HandlerInterceptor.afterCompletion() – medvedev1088

+0

409 của bạn được đặt trước khi HandlerInterceptor.afterCompletion() được gọi. – subhashlg26

+0

Bạn đã thực hiện 'HandlerInterceptor' hoặc phân lớp một trong các triển khai? – Leon

Trả lời

1

Bạn cần đảm bảo rằng bạn gọi phương thức setStatus trên đối tượng response của bạn về ngoại lệ.

Nếu bạn khẳng định điều này, việc nâng cấp lên phiên bản khởi động mùa xuân 1.1.11 có thể khắc phục sự cố của bạn. Nó liên quan đến số fix này. Trước khi sửa chữa, ErrorPageFilter đã che giấu trạng thái phản hồi của phản hồi được bao bọc trong các trường hợp mà phương thức sendError không được gọi rõ ràng trên ErrorWrapperResponse.

Các mã sau khi cố định changed từ đơn giản return this.status để

 if (this.errorToSend) { 
      return this.status; 
     } 
     else { 
      // If there was no error we need to trust the wrapped response 
      return super.getStatus(); 
     } 

đó là lý do tại sao tôi tin rằng việc nâng cấp sẽ khắc phục sự cố.

Cuối cùng, nếu bạn tiếp tục tồn tại, gỡ lỗi qua ErrorPageFilter phải cho biết nguồn gốc của sự cố

Các vấn đề liên quan