diff --git a/demoiselle-rest/src/main/java/org/demoiselle/jee/rest/exception/treatment/ExceptionTreatmentImpl.java b/demoiselle-rest/src/main/java/org/demoiselle/jee/rest/exception/treatment/ExceptionTreatmentImpl.java index a1d91f751..230fcb070 100644 --- a/demoiselle-rest/src/main/java/org/demoiselle/jee/rest/exception/treatment/ExceptionTreatmentImpl.java +++ b/demoiselle-rest/src/main/java/org/demoiselle/jee/rest/exception/treatment/ExceptionTreatmentImpl.java @@ -8,6 +8,8 @@ import java.sql.SQLException; import java.util.ArrayList; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; import java.util.logging.Logger; @@ -26,8 +28,6 @@ import org.demoiselle.jee.rest.message.DemoiselleRESTMessage; import com.fasterxml.jackson.databind.exc.InvalidFormatException; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; /** * Default implementation of All Exception Treatments in Demoiselle Framework. @@ -87,7 +87,13 @@ public Response getFormatedError(Throwable exception, HttpServletRequest request ConstraintViolationException c = (ConstraintViolationException) exception; c.getConstraintViolations().stream().forEach((violation) -> { - String objectType = violation.getLeafBean().getClass().getSimpleName(); + Object bean = violation.getLeafBean(); + String objectType = bean.getClass().getSimpleName(); + boolean isProxy = objectType.contains("$Proxy$"); + // if it's a wrapped proxy object, get the original bean class that is the superclass + if(isProxy) { + objectType = bean.getClass().getSuperclass().getSimpleName(); + } // This is fixed because REST beans validations only accept ONE // parameter