2017-10-12 94 views
0

我試圖用註解而不是部署描述符在Java中編寫示例REST服務。有條件地公開REST資源

@ApplicationPath("/services") 
public class RestApp extends Application { 
    @Override 
    public Set<Class<?>> getClasses() { 
     final Set<Class<?>> classes = new HashSet<>(); 
     classes.add(Request.class); 
     return classes; 
    } 
} 

的示例請求類

@Path("sequence-numbers") 
public class Request { 
@POST 
    @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8") 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response createInstance(SnsConfig snsConfig, @Context final HttpServletResponse servletResponse, 
       @Context final HttpServletRequest servletRequest) { 
    } 
} 

如果classes.add(Request.class)從代碼的@Path( 「序列號」)不應該暴露除去。但即使我註釋掉classes.add語句,post方法在發送請求時也會受到影響。我對註釋的使用是錯誤的還是有其他可能導致此問題的內容?

編輯:我試着評論整個getClasses方法,仍然有效。我猜如果在@ApplicationPath下沒有指定任何類,那麼將掃描所有文件以查找@Path。我想使用getClasses的原因是檢查一些應用程序特定的條件,並決定添加或不添加類/ @ Path。有沒有辦法公開一個基於條件的REST資源?

回答

1

是的,這是可能的。如果您在getClasses()方法中返回一個空Set,或者您沒有從javax.ws.rs.core.Application覆蓋getClasses()(或getSingletons()),則將掃描所有路徑。如果您返回一個非空集合,則只會發佈指定的類。

+0

是的,我正在返回一個空集,這就是問題所在。我發佈了對應於@ApplicationPath的類,而不是返回一個空集,它工作正常。 – kishore