2016-10-07 9 views
0

で一貫して動作しません。私のAPIアプリケーション(APIエンドポイントを公開しています)にjavax and jerseyを使用しています 私はfasterXmlからの例外をキャッチしようとしていますExceptionMapper。ExceptionMapperがJersey 2.xおよびjavax

私の問題は、POSTまたはPUTで間違った属性名を送信していると、いつか私のマッパーが例外をキャッチし、時にはそうでないことです。たとえば :一度自分のアプリケーションを実行する

  1. - >すべてが例外をキャッチし、期待通りに働いています。

  2. 再び自分のアプリケーションを実行する(再起動) - >マッパーは、私は、ジャージー2.xのを使用して(そのように春か何かを使用していない)Tomcatをでホスティングしています何

をキャッチしません。

の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; 
} 

任意のアイデア?

答えて

1

私はジャージがマッパーのそれ​​のリスト内の指定された例外のベストマッチを見つけようとしているので、あなたがしようとしている正確な例外にごマッパーをマッピングする必要がJersey Exception mappers not working when jackson deserialization fails

の助けを借りて解決策を見つけましたマッパーの順序は任意であるため、キャッチしてください。 Jacksonは一般的なjson例外のための独自のマッパーを持っているので、マッパーが必要とする例外をキャッチするようにしてください。

関連する問題