2017-07-27 69 views
0

在我的春季開機應用程序中。我有用戶類別:春季開機僅使用@valid形式驗證特定屬性

public class User { 

    private Long id; 

    @NotEmpty(message="Field is required.") 
    @Size(max=50, message="Field cannot exceed 50 characters in length.") 
    private String username; 

    @NotEmpty(message="Field is required.") 
    @Size(max=50, message="Field cannot exceed 50 characters in length.") 
    private String name; 

    @NotEmpty(message="Field is required.") 
    @Email(message="Please enter valid email address.") 
    private String email; 

    .... getter and setter here.... 
} 

我創建了用戶註冊表單,我在驗證名稱,用戶名和電子郵件。

像這樣:

@RequestMapping(value="/user/register", method= RequestMethod.GET) 
public String createUserForm(User user){ 
    return "user/create"; 
} 

@RequestMapping(value="/user/register", method= RequestMethod.POST) 
public String createUser(@Valid User user, BindingResult bindingResult){ 

    if (bindingResult.hasErrors()) { 
     return "users/create"; 
    } 
    //Here code to save user 
    return "users/createdSuccess"; 

} 

現在我想創造忘記密碼頁面供用戶使用。忘記密碼頁面只包含電子郵件地址。但是,如果我使用驗證用戶模型,它總會給出錯誤,因爲有名稱和用戶名屬性被添加。

如何忽略名稱和用戶名註釋以忘記密碼頁並僅驗證電子郵件地址。

@RequestMapping(value="/account/forgot", method= RequestMethod.GET) 
public String forgotPassForm(User user){ 
    return "users/forgotPassword"; 
} 

@RequestMapping(value="/account/forgot", method= RequestMethod.POST) 
public String resetPass(@Valid User user, BindingResult bindingResult){ 

    if (bindingResult.hasErrors()) { 
     return "users/forgotPassword"; 
    } 

    return "users/passwordEmailSent"; 

} 

回答

0

您應該使用@ Validated-annotation與提供的驗證組和適當的驗證器。這裏你可以看到這樣的例子: http://www.journaldev.com/2668/spring-validation-example-mvc-validator

+0

我改變了這個:public String resetPass(@ModelAttribute(「email」)@Validated User user,BindingResult bindingResult){....但是得到錯誤:BindingResult和bean名稱'email'的純樸目標對象都沒有請求屬性 – VK321

+0

看鏈接,你應該添加一些依賴關係,並提供您的自定義驗證器 – ema

+0

我不想創建自定義驗證,這是問這個問題的全部要點。 – VK321

0

不知道如果我理解你的權利,但我種過類似的問題,即用戶更新其憑據,當然還有的可能性,即密碼 -field ist empty(如果用戶不想(重新)設置它)。所以我只是檢查,如果密碼字段爲空或不(它可能是一個「髒」的解決方案,但對我來說它的工作(我還做了HTML的側表單驗證)):

if (bindingResult.hasErrors()) { 
    // ignore field password 
    if (!bindingResult.hasFieldErrors("password")) { 
      // do something 
    } 
}