【问题标题】:JAX-RS Form Validation -Highlight input text field and display validation messageJAX-RS 表单验证 - 突出显示输入文本字段并显示验证消息
【发布时间】:2013-11-11 04:37:30
【问题描述】:

我有一个示例 CRUD 应用程序,使用的应用程序是 Wine Cellar 应用程序。您可以搜索葡萄酒、将葡萄酒添加到您的酒窖、更新和删除葡萄酒。我是从RESTful services with jQuery and Java using JAX-RS and 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)以及正确的验证消息?

【问题讨论】:

  • 您能否详细说明如何调用验证?您是自己做的,还是与 Jersey 提供的 Bean Validation 集成?
  • 我正在使用 Bean 验证。我做了更多搜索,发现了这个问题stackoverflow.com/questions/5226797/…,它似乎与我想要完成的相似。如果需要,我会对其进行审核并更新我的问题。
  • 我仍然不确定在您的情况下如何调用 Bean Validation。你是在自己调用javax.validation.Validator吗?

标签: java forms constraints jax-rs bean-validation


【解决方案1】:

对不一致或不清楚的地方表示抱歉。

我使用 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));
    }

JsonMapping Exception

Constraint Violation

【讨论】:

    猜你喜欢
    • 2017-09-22
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 2019-12-21
    • 2014-06-22
    相关资源
    最近更新 更多