Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[5기 손가현] Shorten-URL 과제 제출합니다. #72

Open
wants to merge 14 commits into
base: hyun2371
Choose a base branch
from
Open
Prev Previous commit
Next Next commit
[Feat] DTO 및 검증 로직 추가
hyun2371 committed Dec 17, 2023
commit 21f4e6c755bc6f1071d1b6d7dc9ca83e0c9740d3
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.prgrms.url_shortener.dto;

import com.prgrms.url_shortener.dto.valid.UrlValid;
import jakarta.validation.constraints.Size;

public record ShortenUrlRequest(
@UrlValid
@Size(max = 255, message = "URL은 255자 이내입니다.")
String originUrl
){}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.prgrms.url_shortener.dto;

public record ShortenUrlResponse(
String shortenUrl,
int requestCount
){}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.prgrms.url_shortener.dto.valid;

import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

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

String message() default "URL 형식이 올바르지 않습니다.";

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

Class<? extends Payload>[] payload() default {};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.prgrms.url_shortener.dto.valid;

import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import java.net.URL;
import java.net.URLConnection;

public class UrlValidation implements ConstraintValidator<UrlValid, String> {
private static final String HTTPS_PROTOCOL = "https://";
private static final String HTTP_PROTOCOL = "http://";

@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
try {
if (hasNotProtocol(value)) {
value = HTTPS_PROTOCOL + value;
}

URL url = new URL(value);
URLConnection conn = url.openConnection();
conn.connect();
} catch (Exception e) {
return false;
}
return true;
}

private boolean hasNotProtocol(String originUrl) {
return !(originUrl.startsWith(HTTPS_PROTOCOL) || originUrl.startsWith(HTTP_PROTOCOL));
}
}