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”
  • 이렇게 하는 이유는?
    • 이 원칙을 준수하면 하위 클래스는 예상된 동작 또는 기능을 깨뜨리지 않고 상위 클래스의 대체물로 사용될 수 있고
    • 상위 클래스 인터페이스에 의존하는 클라이언트는 하위 클래스 객체를 사용할 때 메소드 시그니처와 매개변수 제약 조건이 일관성 있게 유지되므로 문제없이 상호작용할 수 있다.
    • 즉, 호환성을 보장하게 되고 구현체에서 의도하지 않은 동작을 피할 수 있다.