簡體   English   中英

ExceptionMapper在Jersey 2.x和Javax中無法正常工作

[英]ExceptionMapper not working consistently in Jersey 2.x & javax

我正在為我的api應用程序使用javax and jersey (公開api端點),我試圖通過具有實現ExceptionMapper的Provider來捕獲來自fastXml(在放置和發布調用時)的異常。

我的問題是在POST或PUT上,每當我發送錯誤的屬性名稱時,有時我的映射器就會捕獲異常,而有時卻沒有。 例如:

  1. 一次運行我的應用程序->一切都按預期工作,捕獲異常。

  2. 再次運行我的應用程序(重新啟動)->映射器無法捕獲任何內容

我使用的是Jersey 2.x,托管在tomcat中(不使用spring或類似的東西)。

web.xml:

<servlet>
    <servlet-name>api-service-endpoints</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>
            com.api.providers,
            com.api.resources
        </param-value>

    </init-param>
    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>org.glassfish.jersey.filter.LoggingFilter</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

提供者代碼:

@Provider
public class JsonMappingExceptionProvider
    implements ExceptionMapper<JsonMappingException> {

public JsonMappingExceptionProvider() {
    log.info("JsonMappingExceptionProvider created..");
}

private static final Logger log = LoggerFactory
        .getLogger(JsonMappingExceptionProvider.class);

@Override
public Response toResponse(JsonMappingException exception) {
    log.error("Error while parsing input", exception);
    Response response = createBadRequestResponse();
    return response;
}

有任何想法嗎?

當傑克遜反序列化失敗時,我在Jersey異常映射器的幫助下找到了解決方案

由於jersey試圖在其映射器列表中找到給定異常的最佳匹配,因此您必須將映射器映射到您要捕獲的確切異常,因為映射器的順序是任意的。 Jackson具有自己的通用json異常映射器,因此您應嘗試使您的映射器捕獲所需的異常。

暫無
暫無

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

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