복붙노트

[SPRING] 입력 된 필드의 길이를 나타 내기 위해 Hibernate @Size 오류 메시지를 커스터마이징하는 방법

SPRING

입력 된 필드의 길이를 나타 내기 위해 Hibernate @Size 오류 메시지를 커스터마이징하는 방법

입력 한 실제 문자 수를 포함하도록 텍스트 필드의 오류 메시지를 사용자 지정하고 싶습니다. 나는이 일을 할 수 있었지만 내 해결책에 만족하지 않아서, 나는 이것을 달성하기 위해 다른 사람들이 한 일을 궁금해하고있다.

필드 주석 (테스트 목적으로 10 개로 제한 - 실제 크기는 150 개)

@Column(name = "NAME", nullable = false)
@Size(max=10)
private String name;

message.properties

Size.person.name=Maximum is {1} characters

JSP 코드

    <spring:bind path="person.name">
        <c:set var="nameError">${status.errorMessage}</c:set>
        <c:set var="nameDisplayValue">${status.displayValue}</c:set>
        <c:set var="nameCode">${status.errorCode}</c:set>
    </spring:bind>
    <c:if test="${fn:contains(nameCode,'Size')}">
        <c:set var="nameLen">${fn:length(nameDisplayValue)}</c:set>
        <c:if test="${nameLen gt 0}">
            <c:set var="nameError">${nameError += " (you entered " += nameLen += ")"}</c:set>  
        </c:if>
    </c:if>

    <div class="form-group col-sm-9 <c:if test="${not empty nameError}">has-error</c:if>">
        <label class="control-label" id="nameLabel" for="inputName">Name:<c:if test="${not empty nameError}">&nbsp;&nbsp;${nameError}</c:if></label>
        <form:input type="text" size="10" class="form-control" id="inputName" placeholder="Name" path="name" autocomplete="off"/>                                                           
    </div>

산출

이것은 하나의 필드에 대해서는 괜찮지 만, 작업중인 폼에는 크기 유효성 검사가있는 10 개 이상의 필드가 있습니다. 또한 form : input의 size = "10"설정은 실제로 아무 것도 수행하지 않는 것처럼 보입니다. 즉, 여전히 10 자 이상을 입력 할 수 있습니다.

한 가지 옵션은 사용자 정의 유효성 검사기를 작성하는 것입니다.하지만이 작업은 내가하고 싶은 일에 과도한 것처럼 보입니다. 폼이 게시되기 전에 또 다른 오류를 잡을 수 있지만 모든 유효성 검사 서버 쪽을 유지하려고합니다. 어떤 제안이라도 대단히 감사하겠습니다.

해결법

  1. ==============================

    1.Hibernate 문서에서 유효성 검사 메시지를 보간하는 것에 대한 좋은 문서가있다 : 4 장. 제약 조건 오류 메시지 보간.

    Hibernate 문서에서 유효성 검사 메시지를 보간하는 것에 대한 좋은 문서가있다 : 4 장. 제약 조건 오류 메시지 보간.

    클래스 경로의 루트에 ValidationMessages.properties 파일을 생성하면 모든 유효성 검사 메시지를 변경할 수 있습니다.

    javax.validation.constraints.Size.message=Please enter at least {min} and at most {max} characters.
    

    {...}의 매개 변수는 주석의 속성 이름입니다. 그것은 거의 모든 제약 조건에 적용됩니다. 유효성이 검사 된 값을 참조하려면 {validatedValue}를 사용할 수 있습니다. Formatter를 사용하여 값을 포맷 할 수도 있습니다.

    ... ${formatter.format('...', validatedValue)} ...
    

    불행히도 길이에는 형식 문자열이 없습니다.

    그래서 모든 @Size에 대해 정말로 그런 메시지를 원한다면, 당신은 당신 자신의 javax.validation.MessageInterpolator를 구현해야 할 것이다. (위의 링크에서 커스텀 메시지 보간 참조).

    추가 설명 : 기본 유효성 검사 메시지를 변경할 때 부작용이 있습니다. @Size는 컬렉션에도 사용할 수 있습니다. 적어도이 메시지는 적절하지 않습니다. 나는 보통 이것을 위해 두 번째 검증 메시지를 생성한다.

    javax.validation.constraints.Size.Collection.message=Please select at least {min} and at most {max} elements.
    

    그리고 제약 조건에서 그것을 사용하십시오 :

    public final class ValidationMessages {
      public static final String COLLECTION_SIZE = 
          "javax.validation.constraints.Size.Collection.message";
    }
    
    public class MyClass {
        @Size(min = 1, max = 10, message = ValidationMessages.COLLECTION_SIZE)
        private Collection<String> elements;
    }
    

    내 코드 스타일 도구에서 일치하는 규칙을 사용하면 콜렉션에서 @Size 주석에 대한 메시지를 정의하는 것을 잊지 않도록합니다.

  2. from https://stackoverflow.com/questions/31773594/how-to-customize-hibernate-size-error-message-to-indicate-length-of-entered-fie by cc-by-sa and MIT license