Моя служба Spring Boot + Jersey REST не работает должным образом.Jersey ExceptionMapper не отображает исключения
EmailExistsException выбрасывается в UserController, но я получаю только ошибку 500. Все время. И мои исключения не регистрируются.
Я подозреваю, что есть некоторая проблема с конфигурацией при обработке исключений, но не знаю, где ее настроить. Какие-либо предложения?
@POST
@Path("register")
@Produces(MediaType.APPLICATION_JSON)
public Response register(NewUserPayload newUserPayload) throws EmailExistsException, MessagingException
EmailExistsExceptionMapper
@Provider
public class EmailExistsExceptionMapper extends AbstractExceptionMapper implements
ExceptionMapper<EmailExistsException>
{
@Override
public Response toResponse(EmailExistsException e)
{
ResponseEntity re = new ResponseEntity(org.springframework.http.HttpStatus.BAD_REQUEST);
return this.errorResponse(HttpStatus.BAD_REQUEST_400, re, e);
}
}
AbstractExceptionMapper
@Slf4j
public abstract class AbstractExceptionMapper
{
protected Response errorResponse(int status, ResponseEntity responseEntity, Throwable t)
{
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
t.printStackTrace(pw);
log.error(sw.toString()); // logging stack trace.
return customizeResponse(status, responseEntity);
}
private Response customizeResponse(int status, ResponseEntity responseEntity)
{
return Response.status(status).entity(responseEntity).build();
}
}
build.gradle
compile("org.springframework.boot:spring-boot-starter-web") {
exclude module: 'spring-boot-starter-tomcat'
}
compile "org.springframework.boot:spring-boot-starter-jetty"
compile "org.springframework.boot:spring-boot-starter-security"
compile "org.springframework.boot:spring-boot-starter-aop"
compile "org.springframework.boot:spring-boot-starter-data-jpa"
compile "org.springframework.boot:spring-boot-starter-thymeleaf"
compile "org.springframework.boot:spring-boot-starter-jersey"
compile 'org.springframework.boot:spring-boot-starter-mail'
Информация об этой конфигурации отсутствует в [jersey documentation] (https://jersey.java.net/documentation/latest/representations.html#d0e6653). Препятствует ли объявление 'package' объявлять контроллеры? – herau
Я нашел его в некоторых фрагментах кода в Интернете. Я сейчас в Скала, поэтому не мог рассказать вам больше об этом. – Reeebuuk
Спасибо! Оказывается, вам нужно либо явно «зарегистрировать (YourExceptionMapper.class)», либо поместить его в сканированный пакет через «пакеты (« YourExceptionMapperPackage »)». Я провел пару часов, пытаясь понять это, прежде чем я нашел ваш ответ. –