kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

「kaz_javaSpringBootプログラム自動作成◎自動生成」バグ修正UPをベクターに依頼

kaz_javaSpringBootプログラム自動作成◎自動生成」バグ修正UPをベクターに依頼した。OKが来たら、また報告する。
www.vector.co.jp
・Zenn本(SpringBoot、Thymeleaf プログラム自動作成(マクロ使用版))
zenn.dev
・2.1(202204120000)

1.バグ修正
■ユーザー情報登録画面、更新画面のパスワード入力のチェックを8桁以上16桁以下に修正する。
 ①もともとは、必須入力かつ、20桁以下としていた。(当システムでは、@Sizeのminは0固定として使っている)
  しかし、パスワードはやはり最低8桁必要なので、@Sizeをコピーして@CheckSizeMinMaxを作った。
 ②以下が修正、追加箇所

■ユーザー情報Form
public class UserForm implements Serializable {
・・・
<<修正前 start>>
	@NotBlank(groups={GroupOrder1.class})
	@Size(min = 0, max = 20, groups={GroupOrder1.class})
<<修正前 end>>
<<修正後 start>>
	@CheckSizeMinMax(min = 8, max = 16, groups={GroupOrder1.class})
<<修正後 end>>
	@CheckHalfLetterDigitKigou(groups={GroupOrder2.class})	
	@CheckHalfStartEndSpace(groups={GroupOrder2.class})
	private String password;

<<修正前 start>>
	@NotBlank(groups={GroupOrder1.class})
	@Size(min = 0, max = 16, groups={GroupOrder1.class})
<<修正前 end>>
<<修正後 start>>
	@CheckSizeMinMax(min = 8, max = 16, groups={GroupOrder1.class})
<<修正後 end>>
	@CheckHalfLetterDigitKigou(groups={GroupOrder2.class})	
	@CheckHalfStartEndSpace(groups={GroupOrder2.class})
	private String passwordConfirm;
■サイズチェックinterface(MinMaxエラーメッセージ用)
<<追加>>
package com.kaz01u.demo.validation;

import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Documented;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;
import com.kaz01u.demo.validation.CheckSizeMinMax.List;

/**
 * 最小から最大指定のサイズチェック
 */
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Repeatable(List.class)
@Documented
@Constraint(validatedBy = {CheckSizeMinMaxValidator.class})
public @interface CheckSizeMinMax {

	String message() default "{CheckSizeMinMax}";

	Class<?>[] groups() default { };

	Class<? extends Payload>[] payload() default { };

	/**
	 * @return size the element must be higher or equal to
	 */
	int min() default 0;

	/**
	 * @return size the element must be lower or equal to
	 */
	int max() default Integer.MAX_VALUE;

	/**
	 * Defines several {@link Size} annotations on the same element.
	 *
	 * @see Size
	 */
	@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
	@Retention(RUNTIME)
	@Documented
	@interface List {

		CheckSizeMinMax[] value();
	}
}
■サイズチェックValidator(MinMaxエラーメッセージ用)
<<追加>>
package com.kaz01u.demo.validation;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class CheckSizeMinMaxValidator implements ConstraintValidator<CheckSizeMinMax, String>  {

	  private int min;
	  private int max;

	  @Override
	  public void initialize(CheckSizeMinMax checkSizeMinMax) {
		  min = checkSizeMinMax.min();
		  max = checkSizeMinMax.max();
	  }

	  @Override
	  public boolean isValid(String value, ConstraintValidatorContext context) {
	    return value.length() >= min && value.length() <= max;
	  }
}
■メッセージプロパティにMinMaxエラーメッセージ追加
/demo-spring-kaz01u/src/main/resources/messages.properties
# バリデーションエラーメッセージ
Size={0}は、{1}桁以下で入力してください
<<追加 start>>
CheckSizeMinMax={0}は、{2}桁から{1}桁以下で入力してください
<<追加 end>>