この記事では主に Java バリデーションのバックグラウンドパラメータ検証の使用方法の詳細な説明を紹介していますが、編集者が非常に優れていると考えたので、参考として共有します。エディターをフォローして見てみましょう
1. はじめに
バックグラウンド開発プロセスにおいて、パラメータの検証は開発環境の不可欠な部分となっています。例えば、パラメータをnullにすることはできず、メールはメールの形式に準拠する必要があります。手動でif判定を行ったり、正規表現を書いて判定したりすると、開発効率が非常に遅くなり、時間の勝負にどうしても遅れてしまいます。 、コスト、そして品質。したがって、検証層を抽象化することは必然の結果です。以下にいくつかの解決策を示します。
2. いくつかの解決策
1. struts2 の検証は XML で記述されますが、この方法は面倒で開発効率が低くなります。
2. 検証 Bean は JSR-303 標準に基づいて開発されており、非常に便利なアノテーションを使用して実装されていますが、これは単なるインターフェイスであり、Hibernate Validator は Hibernate に依存しないパッケージです。検証 Bean を実装しており、拡張されており、比較的強力です。実装図は次のとおりです。
公式の中国語マニュアルを参照するには、ここをクリックしてください
3。検証フレームワーク。検証ルールは、設定ファイル、アノテーション、および POJO の設定を通じて実行できます。 Pure Java 言語、JavaScript、Groovy、BeanShell などを使用してルールを記述することができます。 今回はあまり説明しません。 3. Bean 検証フレームワークの検証の概要
Bean 検証パッケージは Maven 上で維持されます。最新のパッケージの内容は次のとおりです:
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version> </dependency>
ダウンロード後、このパッケージを開きます。これには検証アノテーションが含まれています:
1. 検証する Bean を定義します: Student.java
package com.shishang; import javax.validation.constraints.*; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; public class Student implements Serializable { @NotNull(message = "名字不能为空") private String name; @Size(min = 6,max = 30,message = "地址应该在6-30字符之间") private String address; @DecimalMax(value = "100.00",message = "体重有些超标哦") @DecimalMin(value = "60.00",message = "多吃点饭吧") private BigDecimal weight; private String friendName; @AssertTrue private Boolean isHaveFriend(){ return friendName != null?true:false; } @Future(message = "生日必须在当前实践之前") private Date birthday; @Pattern(regexp = "^(.+)@(.+)$",message = "邮箱的格式不合法") private String email; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public BigDecimal getWeight() { return weight; } public void setWeight(BigDecimal weight) { this.weight = weight; } public String getFriendName() { return friendName; } public void setFriendName(String friendName) { this.friendName = friendName; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
2. テスト クラス: StudentTest.java
package com.use; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; import java.io.Serializable; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Set; public class StudentTest implements Serializable { public static void main(String[] args) { Student xiaoming = getBean(); List<String> validate = validate(xiaoming); validate.forEach(row -> { System.out.println(row.toString()); }); } private static Student getBean() { Student bean = new Student(); bean.setName(null); bean.setAddress("北京"); bean.setBirthday(new Date()); bean.setFriendName(null); bean.setWeight(new BigDecimal(30)); bean.setEmail("xiaogangfan163.com"); return bean; } private static ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); public static <T> List<String> validate(T t) { Validator validator = factory.getValidator(); Set<ConstraintViolation<T>> constraintViolations = validator.validate(t); List<String> messageList = new ArrayList<>(); for (ConstraintViolation<T> constraintViolation : constraintViolations) { messageList.add(constraintViolation.getMessage()); } return messageList; } }
@NotNull や @Size などと同様、あまり言うことはありません
場合によっては、フレームワークの組み込みがニーズを満たせない場合があります。自分たちでやる必要があります。衣食住は十分にあります。はい、これは難しいことではありません。以下で説明しましょう。 この例では、文字列が大文字か小文字の制約アノテーションであるかを検証します。コードは次のとおりです:
1. 大文字モードまたは小文字モードを表す列挙型 CaseModepackage com.defineconstrain; /** * created by xiaogangfan * on 16/10/25. */ public enum CaseMode { UPPER, LOWER; }
2. CheckCase 制約アノテーションを定義します。
package com.defineconstrain; /** * created by xiaogangfan * on 16/10/25. */ import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.*; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; import javax.validation.Constraint; import javax.validation.Payload; @Target( { METHOD, FIELD, ANNOTATION_TYPE }) @Retention(RUNTIME) @Constraint(validatedBy = CheckCaseValidator.class) @Documented public @interface CheckCase { String message() default "{com.mycompany.constraints.checkcase}"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; CaseMode value(); }
package com.defineconstrain; /** * created by xiaogangfan * on 16/10/25. */ import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; public class CheckCaseValidator implements ConstraintValidator<CheckCase, String> { private CaseMode caseMode; public void initialize(CheckCase constraintAnnotation) { this.caseMode = constraintAnnotation.value(); } public boolean isValid(String object, ConstraintValidatorContext constraintContext) { if (object == null) return true; if (caseMode == CaseMode.UPPER) return object.equals(object.toUpperCase()); else return object.equals(object.toLowerCase()); } }
の getBean() メソッドに行を追加します。
@CheckCase(value = CaseMode.LOWER,message = "名字的拼音需要小写") private String spellName;
6. testValidation() メソッドを実行すると、次のようなエラーが表示されます:
メールの形式は不正です
以上がJava での検証バックグラウンド パラメーター検証の使用方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。