簡體   English   中英

使用RESTEasy處理格式錯誤的@QueryParam

[英]Handling malformed @QueryParam with RESTEasy

對於使用JBoss AS7 / Wildfly的RESTEasy中的異常處理或缺少異常處理,我有些困惑。 我不能完全確定異常處理完全屬於哪個“域”。

這是我用於測試的內容:

@GET
@POST
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public Response test(@QueryParam("id") final long id) {
    log.info("Incoming request! Wee! With id " + id + "!");

    return Response.ok().build();
}

到現在為止還挺好。 行為與localhost / app / rest / test?id = 123相同。 但是,當我在參數中放入不“適合”的內容時,例如localhost / app / rest / test?id = 123abc,我從RESTEasy得到了一個很長的例外,正確地告訴我它不適合預期參數。

但是我不了解的是如何處理/捕獲此異常。 顯然,我不希望40行堆棧跟蹤信息進入我的主(或任何)日志,而是對自己進行適當的錯誤記錄。 我的研究僅發現了一種處理NumberFormatException類型的所有Exception的通用方法,這完全不適合任何理智的日志記錄方法。

那么,我該如何處理呢? 當這種情況發生在我的代碼“外部”時,我無法用try / catch完全包圍它,並且特定REST映射的特定錯誤參數實際上不足以編寫應用程序范圍的Exception映射器。

服務器沒有響應400錯誤是很奇怪的。 如果您仍然想自己處理查詢參數,則可以進行過濾並檢查那里的所有查詢參數。 它看起來應該像這樣:

@Provider
public class PreResourceFilter implements ContainerRequestFilter {
    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {     
        MultivaluedMap<String, String> queryParams = requestContext.getUriInfo().getQueryParameters();
        // here you need to check desired parameters
    }
}

暫無
暫無

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

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