Spring Boot Validation and to customize Error Message
Spring Boot で画面の入力チェックとエラーメッセージの表示を実装
Spring Boot Version 2.0.0.M7で実装してみました。
エラー時の画面サンプル
- Formクラスにチェックしたい制約アノテーションをつける
@ NumberFormatで、フォーマットしてくれて便利
String型以外の項目は、RequestをFormクラスに変換する時にエラーを検知して、BindingResultにエラーが追加
なので、以下のmessages.propertiesで、typeMismatchが先頭についているエラーとなっているよう
public class PersonForm { @NotEmpty private String firstName; @NotEmpty private String lastName; @Max(100) private Integer age; @Past @DateTimeFormat(pattern = "uuuu-MM-dd") private LocalDate birthDay; @Digits(integer = 10, fraction = 0) @NumberFormat(pattern = "#,###") private BigDecimal salary; ... setter and getter
@Controller @RequestMapping("/person") public class PersonController { private static final Logger logger = LoggerFactory.getLogger(PersonController.class); @ModelAttribute public PersonForm setUp() { PersonForm personForm = new PersonForm(); // set init value personForm.setFirstName("first Name1"); personForm.setLastName("last name1"); return personForm; } @RequestMapping("/") public String home() { logger.info("home"); return "/person"; } @PostMapping("/valid") public String valid(@Validated PersonForm personForm, BindingResult bindingResult) { logger.info("person valid"); bindingResult.getAllErrors().forEach(e -> logger.error("error=[{}]", e.getDefaultMessage())); return "person"; } }
- エラーメッセージは、resources directory配下に、messages.propertiesで以下の内容で作成
以下のキーに例えば「validation」とかの接頭語を付けたいのですが、方法が?です。
# for form column of error message firstName=名 lastName=姓 age=年齢 birthDay=誕生日 salary=給与 # for validation error message NotEmpty={0}は、必須です。 Max={0}は、{1}文字までで入力してください。 Max.personForm.age={0}は、{1}歳までで入力してください。 Digits={0}は、整数部{2}文字で入力してください。 Past={0}は、過去の日を入力してください。 typeMismatch.personForm.java.lang.Integer={0}は、数値で入力してくださいね。 typeMismatch.personForm.age={0}は、数値で入力してください。 typeMismatch.java.math.BigDecimal={0}は、金額で入力してください typeMismatch.java.time.LocalDate={0}は、日付けを入力してください
コードは、アップ
https://github.com/tomoTaka01/spring-mvc-sample
カスタムバリデーションも作成したいです!
修正したコードを再起動なしで反映する
Spring Boot ではbuild.gradleにdevtoolsを追加するだけ
dependencies { runtime('org.springframework.boot:spring-boot-devtools') }
[ctrl]+[command]+a