java - 用于无效 Json 字符串的 Jersey 自定义异常映射器

标签 java json rest validation jersey

我正在开发一个应用程序,我需要为其构建响应,以防在请求中发送无效的 JSON 负载。

当前在服务器端收到的异常消息是意外字符('"'(代码 34)):需要用逗号分隔 OBJECT 条目 在 [来源:org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@310db662;行:13,列:7]

这就是我努力实现它的方式......

import java.util.ArrayList;
import java.util.List;

import javax.validation.ConstraintDeclarationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

@Provider
public class JsonParseExceptionMapper implements ExceptionMapper<JsonProcessingException> {

    private static Logger logger = LogManager.getLogger(JsonParseExceptionMapper.class.getName());

    @Override
    public Response toResponse(final JsonProcessingException ex) {

        System.out.println("inside json parse exception mappper");

        logger.error(messages.toString());
        return Response.status(Response.Status.BAD_REQUEST).entity(messages).type(MediaType.APPLICATION_JSON).build();
    }
}

我也有一个类似的 ExceptionMapper,它可以捕获工作正常的 ConstraintViolationException。

我还按照互联网上的建议尝试了一些不同的异常(exception)情况,仅举几例

JsonProcessingException
BadRequestException
JsonParseException
InvalidFormatException
ConstraintDeclarationException

但在这种情况下,上述异常似乎都不起作用。有没有人知道应该将哪个异常与 ExceptionMapper 结合使用来捕获这种情况。
另外,我想可能有多个 ExceptionMapper 实现相互并行运行。如果我错了,请更正。

编辑:这就是我所说的无效 JSON 负载的意思,请注意校验和之前缺少的逗号

{
    "payload": {
        "name":"rachel",
        "employeeid":"23443"
    }
    "checksum":""
}

Jersey v2.22.1
Spring v4.2.4-RELEASE

出于某种原因,我无法对任何帖子发表评论!!!甚至编辑窗口也有问题,我看不到任何图标!!

我也尝试使用 RuntimeException、Exception 和 IOException,但 ExceptionMapper 对它们也不起作用。我想这需要特定的异常时间,例如与另一个 ExceptionMapper 一起使用的 ConstraintViolationException,并且工作正常。

web.xml的一部分 jersey.config.beanValidation.enableOutputValidationErrorEntity.server 真的 jersey.config.server.disableMoxyJson 真的

最佳答案

最初我为 Json Parsing 注册了 JacksonFeature.class,它使用自己的 ExceptionMapper 来处理 JsonParseException。

我将其更改为 JacksonJaxbJsonProvider.class。

我现在可以使用我的自定义 JsonParseExceptionMapper。

必须更改某些依赖项!!

关于java - 用于无效 Json 字符串的 Jersey 自定义异常映射器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35669774/

相关文章:

java - eclipse在ubuntu上打开后崩溃

json - Postgres 返回带组的 json

php - 在 php 中从 mysql 查询 JSON db 对象

java - 如何使用 REST 以编程方式从 apache archiva 下载单个工件?

api - 支付平台的 REST API 交易

java - 如何在java se中使用证书进行加密

java - Magnolia 6.0 至少执行 MyModule 的 UpdateTasks

java - 当我使用 json.encode 时,使用 Vert.x 的 JSON 库时出现问题

java - 我如何将凭据从rest客户端发布到spring securityrest api?

java - libGDX:根据用户的输入更改 PNG 的颜色