2014-10-30 19 views
6

Tôi muốn tùy chỉnh phản hồi 404, máy chủ (không phải tôi) ném bất cứ khi nào nó không thể tìm thấy tài nguyên được yêu cầu, hoặc ném WebApplicationException tùy chỉnh bản thân mình, nếu có thể kiểm tra xem một tài nguyên được yêu cầu có xuất hiện trong một ứng dụng không? có lẽ một Danh sách các tài nguyên được lưu trữ ở đâu đó?). xin vui lòng không giới thiệu cho tôi các giải pháp đề xuất mở rộng WebApplicationException, bởi vì ngay cả khi làm như vậy, vấn đề của tôi là khi nào để ném nó ?, khi tài nguyên không được tìm thấy! nhưng làm thế nào để thể hiện nhu cầu này trong khung áo dàiNơi để ném lỗi 404 tùy chỉnh trong áo khi HttpServer không thể tìm thấy tài nguyên

+0

Bạn đã thử gì cho đến thời điểm này? 'ExceptionMapper' có thể hữu ích ... – zyexal

+0

Bạn sử dụng verion Jersey nào? –

+0

nó được cho là Jersey 2.x, với grizzly-http-server 2.3.0, tôi đang thử các ví dụ ở đây [link] (https://github.com/jersey/jersey/tree/master/examples) –

Trả lời

9

Jersey throwsjavax.ws.rs.NotFoundException khi không tìm thấy điểm cuối. Chỉ cần sử dụng trình lập bản đồ ngoại lệ để chuyển đổi thành phản hồi theo lựa chọn của bạn:

import javax.ws.rs.NotFoundException; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.ext.ExceptionMapper; 
import javax.ws.rs.ext.Provider; 

@Provider 
public class NotFoundExceptionMapper implements ExceptionMapper<NotFoundException> { 

    public Response toResponse(NotFoundException exception) { 
     return Response.status(Response.Status.NOT_FOUND) 
       .entity("No such resource") 
       .build(); 
    } 
} 
+1

thank's nhưng không may sau khi thêm mã của bạn, vào cùng một gói mà lớp chính của tôi cư trú và chạy 'curl -g -i http: // localhost: 8080/base/@@@ 11' Tôi nhận được 404 không có nội dung, như xa như tôi biết '@ Provider' là ở đây để nói với máy chủ này là lớp để ném khi một nguồn tài nguyên không được tìm thấy, là điều này phải không? sau đó làm thế nào để làm cho nó hoạt động ?! –

+0

Tôi không nghĩ mình cần đăng ký ở đâu đó, đúng không? –

+0

Nếu bạn đã định cấu hình quét gói và bạn đã đặt nhà cung cấp trong gói được chỉ định thì nó sẽ hoạt động. Có một số loại nhà cung cấp trong JAX-RS (xem thêm: http://stackoverflow.com/questions/13557442/what-does-provider-in-jax-rs-mean). ExceptionMappers cho phép bạn nắm bắt bất kỳ ngoại lệ nào bạn muốn xử lý và tạo ra một phản hồi tùy chỉnh. Trong trường hợp này, chúng tôi đang xử lý NotFoundException vì nó bị máy chủ ném ra khi không tìm thấy tài nguyên phù hợp. –

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