From 4dcafe46db9cda45d7d16b51b1a46fc57466656c Mon Sep 17 00:00:00 2001 From: Keith Woodlock Date: Mon, 28 May 2012 01:53:57 +0100 Subject: [PATCH] add general support for unsupported parameters in modifying requests. --- .../UnrecognizedPropertyExceptionMapper.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 mifosng-provider/src/main/java/org/mifosng/platform/api/errorhandling/UnrecognizedPropertyExceptionMapper.java diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/errorhandling/UnrecognizedPropertyExceptionMapper.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/errorhandling/UnrecognizedPropertyExceptionMapper.java new file mode 100644 index 000000000..04cef7feb --- /dev/null +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/errorhandling/UnrecognizedPropertyExceptionMapper.java @@ -0,0 +1,45 @@ +package org.mifosng.platform.api.errorhandling; + +import java.util.ArrayList; +import java.util.List; + +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +import org.codehaus.jackson.map.exc.UnrecognizedPropertyException; +import org.mifosng.data.ApiGlobalErrorResponse; +import org.mifosng.data.ApiParameterError; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +/** + * An {@link ExceptionMapper} to map {@link UnrecognizedPropertyException} thrown by platform into a HTTP API friendly format. + * + * The {@link UnrecognizedPropertyException} is typically thrown when a parameter is passed during and post or put that is not expected. + */ +@Provider +@Component +@Scope("singleton") +public class UnrecognizedPropertyExceptionMapper implements ExceptionMapper { + + @Override + public Response toResponse(UnrecognizedPropertyException exception) { + + String parameterName = exception.getUnrecognizedPropertyName(); + + StringBuilder validationErrorCode = new StringBuilder("error.msg.parameter.").append(parameterName).append(".unsupported"); + StringBuilder defaultEnglishMessage = new StringBuilder("The parameter ").append(parameterName).append(" is not supported."); + ApiParameterError error = ApiParameterError.parameterError(validationErrorCode.toString(), defaultEnglishMessage.toString(), parameterName); + + List errors = new ArrayList(); + errors.add(error); + + ApiGlobalErrorResponse invalidParameterError = ApiGlobalErrorResponse.badClientRequest( + "validation.msg.validation.errors.exist", + "Validation errors exist.", errors); + + return Response.status(Status.BAD_REQUEST).entity(invalidParameterError).build(); + } +} \ No newline at end of file