2012-03-14 33 views
6

Có thể trả lại lỗi HTTP từ giao diện RESTeasy không? Tôi hiện đang sử dụng xích web bộ lọc cho điều này nhưng tôi muốn biết nếu nó có thể trực tiếp từ giao diện ...Trả về lỗi HTTP từ giao diện RESTeasy

Ví dụ sudo-code:

@Path("/foo") 
public class FooBar { 

    @GET 
    @Path("/bar") 
    @Produces("application/json") 
    public Object testMethod(@HeaderParam("var_1") @DefaultValue("") String var1, 
          @HeaderParam("var_2") @DefaultValue("") String var2 { 

     if (var1.equals(var2)) { 
      return "All Good"; 
     } else { 
      return HTTP error 403; 
     } 
    } 
} 

Trả lời

18

Tìm thấy giải pháp và nó rất đơn giản:

throw new WebApplicationException(); 

Vì vậy:

@Path("/foo") 
public class FooBar { 

    @GET 
    @Path("/bar") 
    @Produces("application/json") 
    public Object testMethod(@HeaderParam("var_1") @DefaultValue("") String var1, 
          @HeaderParam("var_2") @DefaultValue("") String var2 { 

     if (var1.equals(var2)) { 
      return "All Good"; 
     } else { 
      throw new WebApplicationException(HttpURLConnection.HTTP_FORBIDDEN); 
     } 
    } 
} 
0

Return một javax.ws.rs.core.Response để thiết lập mã phản hồi.

import javax.ws.rs.core.Response; 

@Path("/foo") 
public class FooBar { 

    @GET 
    @Path("/bar") 
    @Produces("application/json") 
    public Response testMethod(@HeaderParam("var_1") @DefaultValue("") String var1, 
          @HeaderParam("var_2") @DefaultValue("") String var2 { 

     if (var1.equals(var2)) { 
      return Response.ok("All Good").build(); 
     } else { 
      return Response.status(Response.Status.FORBIDDEN).entity("Sorry").build() 
     } 
    } 
} 

Điều đó sẽ giúp bạn tiết kiệm stacktrace liên quan đến ngoại lệ.