HV000151) A method overriding another method must not redefine the parameter constraint configuration
2023, Jul 11
error log
Caused by: javax.validation.ConstraintDeclarationException:
HV000151:
A method overriding another method must not redefine the parameter constraint configuration,
but method ResourceFlowServiceImpl#upload(FileCdo) redefines the configuration of ResourceFlowService#upload(FileCdo).
code
public interface ResourceFlowService {
void upload(FileCdo fileCdo);
}
// implements
public class ResourceFlowServiceImpl implements ResourceFlowService {
@Override
public void upload(@Valid FileCdo fileCdo) {
...
}
}
Cause
- 오류는 거창하지만, 풀이하면 Hibernate Validator라이브러리에서 발생하는 것으로
- 메소드 오버라이딩을 할 때 상위 클래스의 메소드 시그니처를 유지해야하는데, 여기에는 인자 타입도 맞춰야하지만 제약조건도 일치해야한다는 것이다.
- 즉 상위 클래스에 @Valid가 없음에도 하위 클래스에서 이 시그니처를 변경할 수 없다
- “A method overriding another method must not redefine the parameter constraint configuration”
- 이렇게 하는 이유는?
- 이 원칙을 준수하면 하위 클래스는 예상된 동작 또는 기능을 깨뜨리지 않고 상위 클래스의 대체물로 사용될 수 있고
- 상위 클래스 인터페이스에 의존하는 클라이언트는 하위 클래스 객체를 사용할 때 메소드 시그니처와 매개변수 제약 조건이 일관성 있게 유지되므로 문제없이 상호작용할 수 있다.
- 즉, 호환성을 보장하게 되고 구현체에서 의도하지 않은 동작을 피할 수 있다.