From 05c4e722b6524816752ee26a61fcd9f34a419f5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Fri, 21 Dec 2018 14:05:52 +0100 Subject: [PATCH] Map com.fasterxml.jackson.core.JsonParseException to proper response --- .../scm/api/FallbackExceptionMapper.java | 11 +----- .../scm/api/JsonParseExceptionMapper.java | 35 +++++++++++++++++++ 2 files changed, 36 insertions(+), 10 deletions(-) create mode 100644 scm-webapp/src/main/java/sonia/scm/api/JsonParseExceptionMapper.java diff --git a/scm-webapp/src/main/java/sonia/scm/api/FallbackExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/FallbackExceptionMapper.java index feb5341e2d..4815b22bdc 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/FallbackExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/FallbackExceptionMapper.java @@ -4,10 +4,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; import sonia.scm.api.v2.resources.ErrorDto; -import sonia.scm.api.v2.resources.ExceptionWithContextToErrorDtoMapper; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; import javax.ws.rs.core.Response; import javax.ws.rs.ext.ExceptionMapper; import javax.ws.rs.ext.Provider; @@ -20,16 +18,9 @@ public class FallbackExceptionMapper implements ExceptionMapper { private static final String ERROR_CODE = "CmR8GCJb31"; - private final ExceptionWithContextToErrorDtoMapper mapper; - - @Inject - public FallbackExceptionMapper(ExceptionWithContextToErrorDtoMapper mapper) { - this.mapper = mapper; - } - @Override public Response toResponse(Exception exception) { - logger.debug("map {} to status code 500", exception); + logger.warn("mapping unexpected {} to status code 500", exception.getClass().getName(), exception); ErrorDto errorDto = new ErrorDto(); errorDto.setMessage("internal server error"); errorDto.setContext(Collections.emptyList()); diff --git a/scm-webapp/src/main/java/sonia/scm/api/JsonParseExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/JsonParseExceptionMapper.java new file mode 100644 index 0000000000..dacecb350e --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/JsonParseExceptionMapper.java @@ -0,0 +1,35 @@ +package sonia.scm.api; + +import com.fasterxml.jackson.core.JsonParseException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.MDC; +import sonia.scm.api.v2.resources.ErrorDto; +import sonia.scm.web.VndMediaType; + +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; +import java.util.Collections; + +@Provider +public class JsonParseExceptionMapper implements ExceptionMapper { + + private static final Logger logger = LoggerFactory.getLogger(JsonParseExceptionMapper.class); + + private static final String ERROR_CODE = "2VRCrvpL71"; + + @Override + public Response toResponse(JsonParseException exception) { + logger.trace("got illegal json: {}", exception.getMessage()); + ErrorDto errorDto = new ErrorDto(); + errorDto.setMessage("illegal json content: " + exception.getMessage()); + errorDto.setContext(Collections.emptyList()); + errorDto.setErrorCode(ERROR_CODE); + errorDto.setTransactionId(MDC.get("transaction_id")); + return Response.status(Response.Status.BAD_REQUEST) + .entity(errorDto) + .type(VndMediaType.ERROR_TYPE) + .build(); + } +}