我正在处理一个应用程序,如果在请求中发送了无效的JSON有效负载,我需要构建响应。
目前在服务器端收到的异常消息是意外字符('“'(代码34)):期望逗号分隔OBJECT条目 在[来源:org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@310db662; line:13,column: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
但上述例外似乎都不适用于这种情况。有没有人知道应该与ExceptionMapper一起使用哪个异常来捕获这种情况 此外,我想有可能有多个ExceptionMapper实现彼此并行运行。如果我错了,请纠正。
编辑:我的意思是无效的JSON Payload,请在校验和之前留意缺少的逗号
{
"payload": {
"name":"rachel",
"employeeid":"23443"
}
"checksum":""
}
泽西岛v2.22.1
Spring v4.2.4-RELEASE
出于某种原因,我无法对任何帖子发表评论!!!即使编辑窗口有问题,我也看不到任何图标!!
我也尝试过使用RuntimeException,Exception和IOException,但ExceptionMapper也不适用于它们。我想它需要一个特定的异常时间,例如ConstraintViolationException,它正在与另一个ExceptionMapper一起使用,并且一个正常工作。
web.xml的某些部分 jersey.config.beanValidation.enableOutputValidationErrorEntity.server 真正 jersey.config.server.disableMoxyJson 真正
答案 0 :(得分:3)
最初我为Json Parsing注册了JacksonFeature.class,它为JsonParseException使用了自己的ExceptionMapper。
我把它改成了JacksonJaxbJsonProvider.class。
我现在可以使用我的自定义JsonParseExceptionMapper。
必须改变某些依赖关系!!