BlogUrl

기본 @Valid의 어노테이션 관한 문제

List<String> BlogUrls 커스텀 어노테이션

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = UrlListValidator.class)
public @interface ValidUrl {

    String message() default "Invalid URL format. Ensure it starts with 'http://' or 'https://'.";;
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}
@Slf4j
public class UrlListValidator implements ConstraintValidator<ValidUrl, List<String>> {

    //TODO: 잘못된 메서드
    @Override
    public boolean isValid(List<String> urlList, ConstraintValidatorContext context) {

        if (urlList == null || urlList.isEmpty()) {
            return true;
        }

        for (String url : urlList) {
            if (url == null || url.isBlank()) {
                return false;
            }
            // 둘다 포함하지 않는다면 (true)
            if (!url.startsWith("http://") && !url.startsWith("https://")) {
                return false;
            }
        }

        // 모든 검증 통과시 true
        return true;
    }
}

PlaceFormRequestDto.java

@Getter
@Setter
@NoArgsConstructor
@ToString
public class PlaceFormRequestDto {

    @NotNull(message = "Not Blank Category")
    @Min(value = 1, message = "CategoryId must be greater than 0")
    private Integer categoryId;

    @NotBlank(message = "Not Blank Name")
    private String name;

    private String phone;

    @NotBlank(message = "Not Blank Address")
    private String addressPart1;

    @NotBlank(message = "Not Blank Address")
    private String addressPart2;

    @NotNull(message = "Not Blank Price")
    private Integer price;

    private String reservationUrl;

    private String description;

    // Custom Annotation 생성
    @ValidUrl
    @Size(max = 4, message = "BlogUrls can have at most {max} items")
    private List<String> blogUrls;

    private List<PlaceNewImageDto> images;
    
    ......