jersey2.x 的 ValidationError 类看起来像这样
@XmlRootElement
public final class ValidationError {
private String message;
private String messageTemplate;
private String path;
private String invalidValue;
...
}
当发生错误时返回这样的字符串
Contact with given ID does not exist. (path = ContactCardResource.getContact.<return value>, invalidValue = null)
但是我需要的是客户端一致的错误消息响应接口(interface)。它应该只发回字符串消息。所以这不应该包括类名和方法名。对于一些不依赖于bean验证的验证,例如重复的用户名。我只是发送带有 400 或 500 状态代码的字符串。我想对 Bean Validation 做同样的事情,如何实现
最佳答案
Bean-Validation 抛出 ConstraintViolationException
,您可以编写自定义异常映射器来处理 ConstraintViolationException
,如下所示。
@Singleton
@Provider
public class ConstraintViolationMapper implements ExceptionMapper<ConstraintViolationException> {
@Override
public Response toResponse(ConstraintViolationException e) {
// There can be multiple constraint Violations
Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
List<String> messages = new ArrayList<>();
for (ConstraintViolation<?> violation : violations) {
messages.add(violation.getMessage());
}
return Response.status(Status.BAD_REQUEST).entity(StringUtils.join(messages,";")).build();
}
}
在您的ResourceConfig
或Appication
中注册上述映射器。
关于java - Jersey 中的自定义 ValidationError 类仅发送错误的字符串消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43423036/