无效 Json 字符串的 Jersey 自定义异常映射器
Jersey Custom Exception Mapper for Invalid Json String
我正在开发一个应用程序,我需要为其构建响应,以防在请求中发送无效的 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。
我还按照互联网上的建议尝试了一些不同的例外情况,仅举几例
JsonProcessingException
BadRequestException
JsonParseException
InvalidFormatException
ConstraintDeclarationException
但是上述例外中的 None 似乎在这种情况下有效。有没有人知道应该将哪个异常与 ExceptionMapper 结合使用来捕获这种情况。
另外,我想可能有多个 ExceptionMapper 实现 运行 彼此并行。如有错误请指正
编辑:这就是我所说的无效 JSON 有效载荷,请注意校验和之前缺少的逗号
{
"payload": {
"name":"rachel",
"employeeid":"23443"
}
"checksum":""
}
泽西岛 v2.22.1
Spring v4.2.4-RELEASE
出于某种原因,我无法对任何帖子发表评论!!!即使编辑 window 也有问题,我看不到任何图标!!
我也尝试使用 RuntimeException、Exception 和 IOException,但 ExceptionMapper 对它们也不起作用。我想这需要特定的异常时间,例如与另一个 ExceptionMapper 一起使用的 ConstraintViolationException,并且工作正常。
web.xml的一部分
jersey.config.beanValidation.enableOutputValidationErrorEntity.server
真的
jersey.config.server.disableMoxyJson
真的
最初我注册了 JacksonFeature.class 用于 Json 解析,它使用自己的 ExceptionMapper 用于 JsonParseException。
我改成了JacksonJaxbJsonProvider.class。
我现在可以使用我的自定义 JsonParseExceptionMapper。
必须更改某些依赖项!!
我正在开发一个应用程序,我需要为其构建响应,以防在请求中发送无效的 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。
我还按照互联网上的建议尝试了一些不同的例外情况,仅举几例
JsonProcessingException
BadRequestException
JsonParseException
InvalidFormatException
ConstraintDeclarationException
但是上述例外中的 None 似乎在这种情况下有效。有没有人知道应该将哪个异常与 ExceptionMapper 结合使用来捕获这种情况。
另外,我想可能有多个 ExceptionMapper 实现 运行 彼此并行。如有错误请指正
编辑:这就是我所说的无效 JSON 有效载荷,请注意校验和之前缺少的逗号
{
"payload": {
"name":"rachel",
"employeeid":"23443"
}
"checksum":""
}
泽西岛 v2.22.1
Spring v4.2.4-RELEASE
出于某种原因,我无法对任何帖子发表评论!!!即使编辑 window 也有问题,我看不到任何图标!!
我也尝试使用 RuntimeException、Exception 和 IOException,但 ExceptionMapper 对它们也不起作用。我想这需要特定的异常时间,例如与另一个 ExceptionMapper 一起使用的 ConstraintViolationException,并且工作正常。
web.xml的一部分 jersey.config.beanValidation.enableOutputValidationErrorEntity.server 真的 jersey.config.server.disableMoxyJson 真的
最初我注册了 JacksonFeature.class 用于 Json 解析,它使用自己的 ExceptionMapper 用于 JsonParseException。
我改成了JacksonJaxbJsonProvider.class。
我现在可以使用我的自定义 JsonParseExceptionMapper。
必须更改某些依赖项!!