0

編集: ackson-jaxrs-base-2.8 で解決された ackson-jaxrs-base の以前のバージョンの問題でした。 https://github.com/FasterXML/jackson-jaxrs-providers/issues/22

例外マッパーを使用して、この問題に取り組んでいます。単一の ExceptionMapper で com.fasterxml.jackson.core.JsonProcessingException のすべての子をマップしたい。

ここに私のコードがあります:

@Provider
public class JsonProcessingExceptionMapper implements ExceptionMapper<JsonProcessingException> {

    @Override
    public Response toResponse(JsonProcessingExceptionexception) {
        return Response.status(Response.Status.BAD_REQUEST)
                .entity("json parsing error!")).build();
    }

次のコードで正常に動作します。

@Provider
public class JsonMappingExceptionMapper implements ExceptionMapper<JsonMappingException> {

    @Override
    public Response toResponse(JsonMappingException exception) {
        return Response.status(Response.Status.BAD_REQUEST)
                .entity("parsing error!").build();
    }
}

編集: JsonProcessingException は JsonMappingException の親です 正確に私はここで間違っていますか?

4

2 に答える 2

1

クラス com.fasterxml.jackson.jaxrs.base.JsonMappingExceptionMapper は lib に存在し、ExceptionMapper を実装します。

したがって、最初のケースでは、このマッパーは JsonMappingException を処理するため、あなたのものよりも適していますが、あなたのものは一般的な JsonProcessingException を処理します。

2 番目のケースでは、マッパーはこのマッパーと同じレベルであるため、適用できます。

于 2016-08-25T17:19:45.603 に答える
0

私自身の質問に答える:

次の方法で問題を修正しました。jackson jar を 2.8x に更新し、次の注釈を追加しました。

@Priority(4000)
@Provider
public class JsonMappingExceptionMapper implements ExceptionMapper<JsonMappingException> {

    @Override
    public Response toResponse(JsonMappingException exception) {
        return Response.status(Response.Status.BAD_REQUEST)
                .entity("parsing error!").build();
    }
}

今は期待どおりに動作します。

于 2016-08-27T05:49:20.723 に答える