簡體   English   中英

Apache CXF-處理操作中缺少的路徑參數

[英]Apache CXF - Handle missing path parameters in an operation

我在我的項目中將apache cxf用於Jax-rs實現。 我有一個使用以下地址定義的服務: http:// ip:port / myservice / {operation}

考慮此服務器的操作定義如下

@Override
@GET
@Path("operation1/{x}/{y}")
@Produces("application/xml")
public String operation1(@PathParam("x") final String x, @PathParam("y") final String y) {
    return null;
}

在請求者使用myservice中未定義的某些操作名稱發出請求的情況下,它將返回404,這是預期的行為。 但是在正確請求操作名稱但沒有正確輸入路徑參數的情況下,我得到的是相同的404。 如果請求中缺少{x}或{y}路徑參數中的任何一個,我想創建一個適當的錯誤。 但是我無法找到一種優雅的方式來按操作處理異常。 在這種情況下,CXF永遠不會映射到該操作。

我有這個異常映射器:

public class ClientExceptionMapper implements ExceptionMapper<ClientErrorException> {

@Override
public Response toResponse(final ClientErrorException exception) {
    return Response.status(Response.Status.FORBIDDEN).entity("Invalid request").build();

}

}

它將處理所有錯誤情況,但不提供有關異常中請求的URL的任何信息。 在未定義路徑參數的情況下,有沒有一種方法可以針對不同的操作以不同的方式處理異常? 例如:我想使用僅為operation1定義的一些自定義邏輯來處理以下請求。 HTTP:// IP:端口/為MyService / operation1 / 20

我為您的案例提供了兩種解決方案。
1)將路徑參數移動到查詢參數。 @QueryParam
2)創建一個過濾器並將其映射到url operation1/*

在為需要驗證路徑參數的方案找到解決方案時,我找到了此鏈接 ,這為解決我的問題提供了一個不錯的解決方法。 盡管這只是一個小技巧,可能不是在現有代碼中實現的好主意,但是如果需要在各自的操作中使用路徑參數,可以考慮使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM