We have come across a problem in when doing JSR-303 validation, due to dropwizard ConstraintViolations adding the InvalidValue back in the message.
The following request payload,
{
"url": "/address/<script>alert(2)</script>"
}
will result in the following error
{
"errors": [
"url must be a valid URL (was /address/<script>alert(2)</script>)"
]
}
We don't want the "was" part.
Based on the investigation we found that it is being appended in the ConstraintViolations.format() method.
public static <T> String format(ConstraintViolation<T> v) {
if (v.getConstraintDescriptor().getAnnotation() instanceof ValidationMethod) {
final ImmutableList<Path.Node> nodes = ImmutableList.copyOf(v.getPropertyPath());
final ImmutableList<Path.Node> usefulNodes = nodes.subList(0, nodes.size() - 1);
final String msg = v.getMessage().startsWith(".") ? "%s%s" : "%s %s";
return String.format(msg,
Joiner.on('.').join(usefulNodes),
v.getMessage()).trim();
} else {
return String.format("%s %s (was %s)",
v.getPropertyPath(),
v.getMessage(),
v.getInvalidValue());
}
}
Is there any way that we can avoid the invalidValue from being attached to the message?
If not can we have a feature switch for that?
We have come across a problem in when doing JSR-303 validation, due to dropwizard
ConstraintViolationsadding the InvalidValue back in the message.The following request payload,
{ "url": "/address/<script>alert(2)</script>" }will result in the following error
{ "errors": [ "url must be a valid URL (was /address/<script>alert(2)</script>)" ] }We don't want the "was" part.
Based on the investigation we found that it is being appended in the
ConstraintViolations.format()method.Is there any way that we can avoid the
invalidValuefrom being attached to the message?If not can we have a feature switch for that?