【问题标题】:How to Handle Invalid DataType Error in Jersey JAX-RS如何处理 Jersey JAX-RS 中的无效数据类型错误
【发布时间】:2018-09-05 05:36:01
【问题描述】:

我正在开发 JAX-RS API,用户将以下 JSON 有效负载发送到我的 API:

{
    "text": "test search",
    "count": "myvalue"
}

如上所述,count 是 POJO SearchDetailsInfo.java 中的 Integer 类型,但用户在向此 API 发布数据时会在其中发送一些垃圾字符串。

请在下面找到我的控制器方法:

@POST
@Path("/myview")
@Produces(MediaType.APPLICATION_JSON)
public OrderedJSONObject getCatalogView(SearchDetailsInfo criteria,
                @Context ContainerRequestContext containerRequestContext) {
        .... processing ....
}

由于数据类型不匹配,API 得到如下响应错误:

Status Code : 400
Status Message : Bad Request
Body:
    Can not construct instance of java.lang.Integer from String value 'myvalue': 
    not a valid Integer value at [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@bd8b3db; line: 5, column: 15] 

由于数据类型不匹配,Jersey 抛出无效数据类型错误。

不幸的是,我无法捕捉到这个异常,因为由于数据类型解析中的异常,请求没有进入控制器方法。

想知道,我怎样才能捕捉到这个异常,以便我可以将错误响应更改为有意义的东西。

谢谢。

【问题讨论】:

  • 您使用的是什么 JSON 提供程序?
  • 我正在使用jersey-media-json-jackson 作为它的球衣项目
  • 您可以创建ExceptionMapper<JsonMappingException>ExceptionMapper<JsonParseException>(是的,两者都有)并注册它们。在这些映射器中返回您想要的任何内容。
  • the Jackson one,他们所做的只是返回异常消息。这就是您目前所看到的。
  • 嗨,保罗,感谢您的回复。创建类JsonMappingExceptionMapper 并扩展到ExceptionMapper 会起作用吗?还是我也需要挂接到应用程序?

标签: jax-rs jersey-2.0 jsonparser


【解决方案1】:

您可以通过实现错误映射器来处理这个问题。对于上面显示的示例,在将 JSON 数据映射到 POJO 时,内部处理似乎引发了异常。

如果您仔细查看日志,您会在处理数据时发现类似InvalidFormatExceptionJsonMappingException 的错误。

您可以为遇到的错误创建异常映射器。我建议使用 super JsonMappingException,因为它会处理诸如无效类型、请求负载中的无效 JSON 等错误:

@Provider
public class GenericExceptionMapper extends Throwable implements ExceptionMapper<JsonMappingException> {
    @Override
    public Response toResponse(JsonMappingException thrExe) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("errorMessage", "Invalid input provided");
        return Response.status(400).entity(jsonObject.toString())
        .type("application/json").build();
    }
}

【讨论】:

    猜你喜欢
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 2015-02-20
    • 2018-12-28
    相关资源
    最近更新 更多