国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 詳解SpringMVC驗證框架Validation特殊用法

詳解SpringMVC驗證框架Validation特殊用法

2020-08-19 11:27wangpeng047 Java教程

本篇文章主要介紹了詳解SpringMVC驗證框架Validation特殊用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

基本用法不說了,網(wǎng)上例子很多,這里主要介紹下比較特殊情況下使用的方法。

1. 分組

有的時候,我們對一個實體類需要有多中驗證方式,在不同的情況下使用不同驗證方式,比如說對于一個實體類來的id來說,保存的時候是不需要的,對于更新時是必須的,可以如下配置:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public class UserModel {
 
  @NotNull(message = "{id.empty}", groups = { First.class })
  private int id;
 
  @NotNull(message = "{username.empty}", groups = { First.class, Second.class })
  private String username;
 
  @NotNull(message = "{content.empty}", groups = { First.class, Second.class })
  private String content;
 
  public int getId() {
    return id;
  }
 
  public void setId(int id) {
    this.id = id;
  }
 
  public String getUsername() {
    return username;
  }
 
  public void setUsername(String username) {
    this.username = username;
  }
 
  public String getContent() {
    return content;
  }
 
  public void setContent(String content) {
    this.content = content;
  }
}
public interface First {
}
 
public interface Second {
}

通過 groups 對驗證進行分組

在controler中的代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@RequestMapping(value = "/save.action", method = RequestMethod.POST)
public String save(@Validated( { Second.class }) UserModel userModel, BindingResult result) {
  if (result.hasErrors()) {
    return "validate/error";
  }
  return "redirect:/success";
}
 
@RequestMapping(value = "/update.action", method = RequestMethod.POST)
public String update(@Validated( { First.class, Second.class }) UserModel user, BindingResult result) {
  if (result.hasErrors()) {
    return "validate/error";
  }
  return "redirect:/success";
}

2. 組序列

默認情況下,不同組別的約束驗證是無序的,然而在某些情況下,約束驗證的順序卻很重要,如下面兩個例子:(1)第二個組中的約束驗證依賴于一個穩(wěn)定狀態(tài)來運行,而這個穩(wěn)定狀態(tài)是由第一個組來進行驗證的。(2)某個組的驗證比較耗時,CPU 和內(nèi)存的使用率相對比較大,最優(yōu)的選擇是將其放在最后進行驗證。因此,在進行組驗證的時候尚需提供一種有序的驗證方式,這就提出了組序列的概念。

一個組可以定義為其他組的序列,使用它進行驗證的時候必須符合該序列規(guī)定的順序。在使用組序列驗證的時候,如果序列前邊的組驗證失敗,則后面的組將不再給予驗證。

下例中聲明了組 GroupA.class,GroupB.class 和 Group.class,其中 default,GroupA,GroupB 均為 Group 的序列。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public interface GroupA {
}
 
public interface GroupB {
}
 
@GroupSequence( { Default.class, GroupA.class, GroupB.class })
public interface Group {
}
 
public class User {
  @NotEmpty(message = "firstname may be empty")
  private String firstname;
 
  @NotEmpty(message = "middlename may be empty", groups = Default.class)
  private String middlename;
 
  @NotEmpty(message = "lastname may be empty", groups = GroupA.class)
  private String lastname;
 
  @NotEmpty(message = "country may be empty", groups = GroupB.class)
  private String country;
}
[java] view plain copy 在CODE上查看代碼片派生到我的代碼片
@RequestMapping(value = "/update.action", method = RequestMethod.POST)
public String register(@Validated(Group.class) User user, BindingResult result) {
  if (result.hasErrors()) {
    return "validate/error";
  }
  return "redirect:/success";
}

3. 驗證多個對象

當我們在一個功能處理方法上需要驗證多個模型對象時,需要通過如下形式來獲取驗證結(jié)果:

?
1
2
3
4
5
6
7
8
9
10
11
@RequestMapping("/validate/multi")
public String multi(@Valid @ModelAttribute("a") A a, BindingResult aErrors, @Valid @ModelAttribute("b") B b, BindingResult bErrors) {
 
  if (aErrors.hasErrors()) { //如果a模型對象驗證失敗
    return "validate/error";
  }
  if (bErrors.hasErrors()) { //如果a模型對象驗證失敗
    return "validate/error";
  }
  return "redirect:/success";
}

每一個模型對象后邊都需要跟一個Errors或BindingResult對象來保存驗證結(jié)果,其方法體內(nèi)部可以使用這兩個驗證結(jié)果對象來選擇出錯時跳轉(zhuǎn)的頁面或處理的邏輯。

4. Junit測試

當自定義拓展Validation時,可以使用如下方法進行測試:

?
1
2
3
4
5
6
7
8
@Test
public void testValidate() {
  AnnotationDescriptor<EqualsAny> descriptor = new AnnotationDescriptor<EqualsAny>(EqualsAny.class);
  EqualsAny equalsAny = AnnotationFactory.create(descriptor);
  EqualsAnyValidator equalsAnyValidator = new EqualsAnyValidator();
  equalsAnyValidator.initialize(equalsAny);
  Assert.assertTrue(equalsAnyValidator.isValid("123", null));
}

另外再講一點spring對自定義JSR-303限制類型支持的新特性,那就是Spring支持往ConstraintValidator里面注入bean對象。例如在EqualsAnyValidator中利用@Resource注解注入其他Bean對象。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://blog.csdn.net/wangpeng047/article/details/41726299

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产精品大片 | 久久艹天天艹 | 最近韩国日本免费观看mv免费版 | 久久精品日产第一区二区三区 | 日韩在线一区二区三区 | 91在线免费看| 在线日韩中文字幕 | 国产一区二区三区在线看 | 成人av一区二区三区 | 亚洲国产精品久久人人爱 | 成年网站视频 | 久久精品国产亚洲 | 亚洲精品在线视频 | 一级黄色一级黄色 | 四季久久免费一区二区三区四区 | 99久久婷婷国产精品综合 | 精品欧美| 国产成人av在线播放 | 麻豆国产尤物av尤物在线观看 | 国产成人精品一区二区三区四区 | 视频一区二区三区中文字幕 | 国产激情不卡 | 丁香婷婷综合激情五月色 | 成人小视频在线观看 | h片在线| 99精品免费视频 | 九九r热 | 国产毛片毛片 | 日韩精品一区二区三区中文在线 | 黄色网日本 | 亚洲一区在线日韩在线深爱 | 欧美激情久久久 | 精品久久久久久久人人人人传媒 | 精品日韩在线 | 青青草国产在线 | 天天成人综合网 | 亚洲精品成人av | 成人在线激情网 | 亚洲电影第二页 | 日韩不卡一区 | 欧美一级片在线 |