簡體   English   中英

當有 DTO 時,如何在 Spring MVC 中進行驗證?

[英]How to do validation in Spring MVC when there's a DTO?

我有一個人 class 和一個 personList DTO。 DTO 用於將人員列表 object 綁定到視圖。 用戶可以編輯一個或多個人並單擊保存以一次保存所有人的編輯。 現在我想驗證新的輸入。 問題是 controller 代碼“bindingResults.hasErrors()”沒有返回用戶輸入錯誤。 我認為這是因為中間有 personList DTO。 似乎它只是檢查 personList class 中的錯誤,而不是應該檢查 person class 中的錯誤。 如何解決?

Model

public class Person implements Serializable{

    private static final long serialVersionUID = 1L;

    @NotEmpty(message="Name must be filled.")
    private String name;

    @Min(value=1900, message="Year is invalid")
    @Max(value=2100, message="Year is invalid")
    private int year;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

}

DTO

public class PersonList {
    
    private List<Person> personList;

    public List<Person> getPersonList() {
        return personList;
    }

    public void setPersonList(List<Person> personList) {
        this.personList = personList;
    }
}

看法

<form action="person" method="post" th:object="${personListBind}">
<th:block th:each="person, itemStat : *{personList}">

    Name:
    <input type="text" th:field="*{personList[__${itemStat.index}__].name}" />

    Year:   
    <input type="text" th:field="*{personList[__${itemStat.index}__].year}" />
</th:block>
<input type="submit" name="btnSaveEdit" value="Save"/>

Controller

@RequestMapping(value = "/person", method = RequestMethod.POST)
public ModelAndView editPerson(
   @Valid @ModelAttribute PersonList personList, 
   BindingResult bindingResults) {
        
        
   if(bindingResults.hasErrors()){
      //perform action
   }

找到了解決方案。 一個簡單的改變。 只需在 DTO class 中添加@Valid。 這是唯一需要更新的行: private List<@Valid Person> personList;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM