2011-11-03 18 views
13

Tôi đang làm việc trên Dịch vụ web trên JAX-RS đã hoạt động. Bây giờ tôi đang tìm cách để bắt một số ngoại lệ để gửi một lỗi 40X với một tin nhắn tùy chỉnh cho người dùng.Làm cách nào để đặt lỗi 40X với thông báo tùy chỉnh trên Ngoại lệ JAX-RS?

Tôi có dịch vụ web và ExceptionMapper.

Đây là dịch vụ web của tôi:

@Path(value = "/test/") 
public interface ServiceTest { 

    @Path(value = "{rrf}") 
    @GET 
    @Produces(MediaType.TEXT_XML) 
    public ObjectDTO getDealer(@PathParam("rrf") String rrf){ 
     ObjectDTO objectDTO = new ObjectDTO(); 
     if(verifyRRFSintax(rrf)) { 
      //Get the objet, this part works fine 
     } else { 
      throw new IllegalArgumentException("Custom message"); 
     } 
     return dwsDTO; 
    } 

    private boolean verifyRRFSintax(String rrf) { 
     return rrf.matches("[0-9]{8}"); 
    } 
} 

Đây là ExceptionMapper tôi

@Provider 
@Produces(MediaType.TEXT_XML) 
public class IllegalArgumentExceptionMapper 
    implements ExceptionMapper<IllegalArgumentException> { 

    @Override 
    public Response toResponse(IllegalArgumentException e) { 
     return Response.status(Response.Status.BAD_REQUEST).build(); 
    } 
} 

và đây là cách nó registed vào file ứng dụng context.xml

<bean id="serviceTest" class="ServiceTest"/> 

<jaxrs:server id="Server" address="/ws"> 
    <jaxrs:serviceBeans> 
     <ref bean="serviceTest"/> 
    </jaxrs:serviceBeans> 
    <jaxrs:providers> 
     <bean id="rffErrorException" class="IllegalArgumentExceptionMapper"/> 
    </jaxrs:providers> 
</jaxrs:server> 

Khi Tôi gỡ lỗi, IllegalArgumentExceptionMapper bắt ngoại lệ tôi ném nhưng tôi không thấy thông báo trên màu vàng trang web được hiển thị trên trình duyệt. Tôi luôn có một số

Erreur d'analyse XML : aucun élément trouvé/XML Parsing Error: no element found (in english)

Làm cách nào để hiển thị thông báo tùy chỉnh này trên trình duyệt? Tại sao, ngay cả khi tôi thay đổi loại Trạng thái phản hồi (NOT_FOUND, BAD_REQUEST, FORBIDDEN), trang màu vàng này luôn giống nhau?

PD: Trên bảng điều khiển, tôi có một thông báo "out.handlemessage" được in khi Mapper bắt ngoại lệ.

Cảm ơn.

+0

kẻ Ok, cảm ơn, cuối cùng tôi đã tìm thấy những gì tôi cần: Tôi thêm một ngoại lệ Tuỳ chỉnh như: public class DwsWebServiceException kéo dài WebApplicationException { DwsWebServiceException công cộng (String nhắn, tình trạng int) { siêu (Response. trạng thái (trạng thái) .entity (message) .type (MediaType.TEXT_XML) .build()); } } và hiển thị thông báo. – jomaora

Trả lời

13
throw new WebApplicationException(Response.status(Status.NOT_FOUND)// Or another Status 
       .entity("Error Message").build()); 
+2

Tôi không biết về các triển khai JAX-RS khác, nhưng đối với tôi, với RestEasy 3.0x, điều này sẽ không hoạt động. Nó không âm thầm và không nhận được phản ứng của khách hàng. Bạn cần thêm '.type (MediaType.TEXT_PLAIN)' vào chuỗi phương thức trong trình xây dựng 'Response' của bạn, nếu không nó có vẻ bị nghẹt thở trên chuỗi" thực thể ". – Lambart

+0

Cảm ơn, @Lambart, tôi đã tìm thấy điều này nhờ nhận xét của bạn: https://stackoverflow.com/questions/23628897/dropwizard-exception-handling-giving-custom-error-json-error-messages-to-clie –

+0

@FerranMaylinch Rất vui được hỗ trợ. Tôi thấy rằng trước đây tôi đã upvoted câu hỏi và câu trả lời đó. :) – Lambart

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