Files
SCM-Manager/scm-webapp/src/main/java/sonia/scm/api/rest/ContextualExceptionMapper.java

36 lines
1.1 KiB
Java
Raw Normal View History

2018-10-26 14:20:19 +02:00
package sonia.scm.api.rest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.ExceptionWithContext;
import sonia.scm.api.v2.resources.ExceptionWithContextToErrorDtoMapper;
import sonia.scm.web.VndMediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
2018-10-26 15:15:51 +02:00
public class ContextualExceptionMapper<E extends ExceptionWithContext> implements ExceptionMapper<E> {
2018-10-26 14:20:19 +02:00
private static final Logger logger = LoggerFactory.getLogger(ContextualExceptionMapper.class);
2018-11-02 17:12:49 +01:00
private final ExceptionWithContextToErrorDtoMapper mapper;
2018-10-26 14:54:55 +02:00
2018-10-26 14:20:19 +02:00
private final Response.Status status;
private final Class<E> type;
2018-10-26 14:54:55 +02:00
public ContextualExceptionMapper(Class<E> type, Response.Status status, ExceptionWithContextToErrorDtoMapper mapper) {
this.mapper = mapper;
2018-10-26 14:20:19 +02:00
this.type = type;
this.status = status;
}
@Override
public Response toResponse(E exception) {
logger.debug("map {} to status code {}", type.getSimpleName(), status.getStatusCode());
return Response.status(status)
.entity(mapper.map(exception))
.type(VndMediaType.ERROR_TYPE)
.build();
}
}