Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation hibernate验证-验证两个路径之一_Validation_Spring Mvc_Polymorphism_Hibernate Validator - Fatal编程技术网

Validation hibernate验证-验证两个路径之一

Validation hibernate验证-验证两个路径之一,validation,spring-mvc,polymorphism,hibernate-validator,Validation,Spring Mvc,Polymorphism,Hibernate Validator,我使用SpringMVC和Hibernate验证程序。我有一个订单,你可以选择不同的付款方式。您有一个单选按钮,用于选择付款方式并输入所选付款方式的相关参数 当然,如果有人选择了“直接借记”,我不希望在“贝宝”表单中出现验证错误。当时我是这样做的: public class OrderForm { @NotNull private Integer customerId private PaymentMethodDebitForm paymentMethodDebitForm;

我使用SpringMVC和Hibernate验证程序。我有一个订单,你可以选择不同的付款方式。您有一个单选按钮,用于选择付款方式并输入所选付款方式的相关参数

当然,如果有人选择了“直接借记”,我不希望在“贝宝”表单中出现验证错误。当时我是这样做的:

public class OrderForm
{
   @NotNull
   private Integer customerId
   private PaymentMethodDebitForm paymentMethodDebitForm;
   private PaymentMethodPayPalForm paymentMethodPayPalForm;
   private String paymentSelection;

   @Valid
   public PaymentForm getPaymentForm ( )
   {
      if (paymentSelection.equals("PayPal"))
      {
         return paymentMethodPayPalForm;
      }
      return paymentMethodDebitForm;
    }
这样,验证器只获取所选付款方式的形式

我有两个问题

  • Spring使用抽象超类(“PaymentForm”)而不是具体类(“PaymentMethodDebitForm”)的名称为此生成错误代码。当我在不同的地方使用这个表单作为具体的子类时,我得到了两个不同的代码。我通过在表单中设置代码来解决此问题:

    public class PaymentMethodDebitForm extends PaymentForm
    {
        @NotNull
        @Size(min = 3, max = 50, message = "{paymentMethodDebitForm.iban.Size}")
        private String iban;
    }
    
  • 在我的jsp中,我需要在呈现输入字段时引用具体类,在呈现错误时引用超类:

     <form:input path="paymentMethodDebitForm.iban" size="40" maxlength="50" />
     <form:errors path="paymentMethodForm.iban" />
    
    
    
    不太好


  • 当涉及到spring/hibernate的表单和验证时,如何处理多态性?有什么建议如何处理这种情况吗?

    我想我会尝试通过
    使用验证组,或者我会将表单分开。这里也讨论了这一点-

    只是想一想:当控制器参数中有@Valid时(例如,
    public void handleRequest(@RequestBody@Valid FormModel
    ),是否可以添加“required=false”之类的内容对于
    @RequestParam
    s?以便您只需使用您想要的实际类,但在controllermethod中都有两个可选参数。然后向控制器添加Exceptionhandler,该控制器检查
    MethodArgumentNotValidException
    一般情况下,并通过类似于`response.getWriter()的方式添加响应。append(…getDefaultMessage());`到
    HttpServletResponse
    -我想这就是我要尝试的,这是绝对正确的。我需要GroupConversion才能让它工作: