[英]JAX-RS Form Validation -Highlight input text field and display validation message
我有一个示例CRUD应用程序,使用的应用程序是Wine Cellar应用程序。 您可以搜索葡萄酒,将葡萄酒添加到酒窖,更新和删除葡萄酒。 我从使用jQuery和Java的RESTful服务使用JAX-RS和Jersey获得了它。
我修改了Wine类,以包括验证约束。
@NotNull(message='Name must have a value')
private String name;
@NotNull(message='Grapes must have a value')
private String grapes;
如果用户创建/更新葡萄酒,并且名称和葡萄字段为空,则会抛出错误。 我所有的验证消息都以json格式返回到浏览器。
public Wine create(Wine wine) {...}
public Wine update(Wine wine) {...}
如果仅引发一个错误,我想向用户显示正确的消息并突出显示该字段。
如何获取触发错误的空字段(名称或ID)以及正确的验证消息?
很抱歉出现不一致或不清楚的地方。
我使用了Web应用程序异常映射器来处理异常。 它检查错误是从Web应用程序异常还是约束违反异常生成的。
if (exception instanceof ConstraintViolationException) {
Set<ErrorResponse> errorResponses = new HashSet<>();
for (ConstraintViolation violation : ((ConstraintViolationException) exception).getConstraintViolations()) {
errorResponses.add(new ErrorResponse(violation.getPropertyPath().toString(),violation.getMessage()));
}
builder.entity(new WebApplicationError(errorResponses));
}
另外,我检查了是否是JsonMapping异常
if (exception instanceof JsonMappingException) {
ResourceBundle bundle = ResourceBundle.getBundle("ValidationMessages");
Set<ErrorResponse> errorResponses = new HashSet<>();
for(Reference ref : ((JsonMappingException) exception).getPath()) {
String className = ref.getFrom().getClass().getName()
.substring(ref.getFrom().getClass().getName()
.lastIndexOf(".") + 1).toLowerCase();
String key = "the.key";
try {
message = bundle.getString(key);
} catch (MissingResourceException e) {
logger.error(e.getMessage());
}
errorResponses.add(new ErrorResponse(ref.getFieldName(), message));
}
builder.entity(new WebApplicationError(errorResponses));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.