Я работаю над приложением, для которого мне нужно было построить ответ, если в запросе будет отправлена недопустимая полезная нагрузка JSON.Jersey Custom Exception Mapper для Invalid Json String
В настоящее время сообщение исключения получил на стороне сервера является Неожиданный символ («"»(код 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
Но ни один из вышеуказанных исключений не похоже на работу в этом случае. Кто-нибудь знает, какое исключение следует использовать вместе с ExceptionMapper, чтобы поймать такие случаи.
Кроме того, я думаю, возможно иметь несколько реализаций ExceptionMapper, работающих параллельно друг другу. Пожалуйста, исправьте, если я ошибаюсь.
Edit: Это то, что я имею в виду недопустимой JSON Payload, обратите внимание на недостающую запятую перед контрольной суммой
{
"payload": {
"name":"rachel",
"employeeid":"23443"
}
"checksum":""
}
Джерси v2.22.1
Spring v4.2.4-РЕЛИЗ
По какой-то причине я не могу комментировать какие-либо сообщения !!! Даже в окне редактирования есть проблемы, я не вижу иконки!
Я также пытался использовать RuntimeException, Exception и IOException, но ExceptionMapper тоже не работал для них. Думаю, для этого требуется определенное время исключения, например ConstraintViolationException, которое используется с другим ExceptionMapper, и что он работает нормально.
некоторая часть web.xml jersey.config.beanValidation.enableOutputValidationErrorEntity.server правда jersey.config.server.disableMoxyJson правда
Вы зарегистрировали картупер в конфиге? Какой json-парсер вы используете? – Derlin
Да, картограф зарегистрирован с помощью @Provider. Я использую codehaus и использую Spring для DI. Джерси v 2.22.1 –
Для меня это выглядит так, что код, который вы предоставили, является правильным (за исключением отсутствия импорта для JsonProcessingException, которое вызвано, по моему мнению, изменением сообщения здесь, на сайте). Вы можете попытаться поймать IOException или даже Exception/RuntimeException, чтобы убедиться, что провайдер вызывается вообще. Также убедитесь, что он находится внутри \t 'jersey.config.server.provider.classpath' (https://jersey.java.net/documentation/latest/appendix-properties.html) – Grief