LoginSignup
1
0

More than 3 years have passed since last update.

Springでバリデーション(アノテーションだけではなく)

Last updated at Posted at 2019-06-25

プログラム

まず、フォームの値を保持するモデルを作成します。

SignUpQuestionFormModel.java
@GroupSequence({ Group1.class,SignUpQuestionFormModel.class })
public class SignUpQuestionFormModel {
    public interface Group1 {

    }
    @NotEmpty(message = "必須入力です" , groups = Group1.class)
    @Size(max = 20, message = "{max}文字以内で入力してください" )
    @Pattern(regexp = "^[0-9a-zA-Z]+$", message = "正しいフォーマットで入力してください" )
    private String name;

    public String getName() {
        return this.name;
    }

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

次に、バリデーションのサービスを作ります。
上記のモデルの中のアノテーションだけでもバリデーションはできますが、少し複雑なものとかやったりアノテーションだけではできないこともあるので、作成しました(文字数とか必須ぐらいならアノテーションだけでもいいですが)

SignUpValidationService.java
@Service
public class SignUpValidationService {

    public ModelAndView validation(SignUpQuestionFormModel model) {

        ModelAndView mav = new ModelAndView();

        String name = model.getName();

        //氏名は、必須と桁数20以下
        if (name != null && !(name.equals(""))) {
            if (name.length() > 20) {
                mav.addObject("name_msg", "氏名には20桁以内で入力してください。");
            }
        } else {
            mav.addObject("name_msg", "氏名は必ず入力してください");
        }

        //何もひっかからなかったらnullを返す
        if (mav.isEmpty()) {
            return null;
        }
        //ひっかかったらビュー名指定してreturnする
        mav.setViewName("SignUpForm");
        return mav;
   }
}

次に、上記のバリデーションサービスをコントローラーから使います。

SignUpController.java
    //新規会員登録の確認画面処理
    @RequestMapping(path = "/SignUpConfirmation", method = RequestMethod.POST)
    public ModelAndView SignUpConfirmation(@Valid SignUpQuestionFormModel model, BindingResult errors,
            HttpSession session) {
     //バリデーション開始
        ModelAndView mav = null;
        // BeanValidationを使用しないバリデーション
        mav = svs.validation(model);
        if (mav != null) {//上記のメソッドでは、一つのバリデーションひっかからなかったら、nullが得られる。
            System.out.println("新規登録の際、バリデーションエラーが起きたので戻る");
            return mav;
        }

    //バリデーション通過したら、DB処理した後に行きたいところに遷移
}
1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0