2016-11-09 33 views
1

我正在編寫使用球衣2和servlet 3的REST服務。我有自定義的GET方法,所有這些方法首先看看請求是否有某些標頭。如果標題不存在,我拋出一個異常。有沒有辦法提供一個「父母般的」@GET方法,它會在進入相應的@路徑鏈接之前拒絕沒有某些標題的請求?就像,如果我的服務名稱爲myService,@Path爲「getHello」,如何在使用myService/getHello註釋方法之前先檢查標頭?Java休息如何使整體獲得過濾器

+0

如果你正在使用Spring,你可以使用攔截器來驗證你的頭。 –

+0

您是否檢查過此https://jersey.java.net/documentation/latest/filters-and-interceptors.html - ContainerRequestFilter – Waqas

回答

1

您可以使用ContainerRequestFilter和檢查方法

@Provider 
public class CheckHeaderFilter implements ContainerRequestFilter { 
    @Override 
    public void filter(ContainerRequestContext context) { 
     if (context.getMethod().toUpperCase().equals("GET")) { 
      String header = context.getHeaderString("SomeHeader"); 
      MultivaluedMap<String, String> headers = context.getHeaders(); 
      if(notValidHEaders) { 
       context.abortWith(Response.status(400).entity("Bad").build()); 
       // or throw WebApplicationException 
      } 
     } 
    } 
} 

如果使用包掃描寄存器資源,過濾器也應該得到回升,並由於@Provider標註的註冊。否則,你需要自己註冊它

參見: