Bean Validation에서 Error Message에 Field Name을 포함시키고 싶을 때 LocalValidatorFactoryBean에서 출력 할 수 없다
8709 단어 BeanValidation자바spring
개요
Bean Validation을 사용하여 입력 검사를 수행하고 오류 메시지를 출력하는 경우 내용에 필드 이름을 포함시키고 싶을 때는주의가 필요했기 때문에 메모.
실행 환경
SampleProject를 GitHub에 넣습니다.
예
다음 양식에 다음과 같은 메시지를 출력하고 싶은 경우
UserForm.java
import java.io.Serializable;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class UserForm implements Serializable {
private static final long serialVersionUID = 1L;
@NotNull(message = "{userForm.name}")
@Size(min = 1, max = 20, message = "{userForm.name}")
private String name;
// getter/setterは省略
"[name] is not null."
주의점
UserControl.java
import javax.validation.Validator;
@Resource
private Validator validator;
// 実際の処理部分
Set<ConstraintViolation<UserForm>> violations = validator.validate(form);
if (!violations.isEmpty()) {
for (ConstraintViolation<UserForm> v : violations) {
log.info(v.getMessage());
}
}
application-context.xml
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
ValidationMessage.properties
userForm.name={0} is not null.
{0}이 필드 이름으로 대체된다고 생각했지만 실제 출력 결과는 다음과 같이 대체되지 않고 출력됩니다.
{0} is not null.
이유
즉, 다음과 같이 @Validated
UserControl.java
@RequestMapping(value = "create", method = RequestMethod.POST, params = "confirm")
public String createConfirm(@Validated UserForm form, BindingResult result) {
if (result.hasErrors()) {
return "user/createForm";
}
return "user/createConfirm";
}
또는 SmartValidator 사용
UserControl.java
import org.springframework.validation.SmartValidator;
@Resource // SmartValidatorは<mvc:annotation-driven>の設定が行われていれば使用できるため、Bean定義不要
private SmartValidator smartValidator;
@RequestMapping(value = "create", method = RequestMethod.POST, params = "confirm")
public String createConfirm(UserForm form, BindingResult result) {
smartValidator.validate(form, result);
if (result.hasErrors()) {
return "user/createForm";
}
return "user/createConfirm";
}
요약
※아무래도 LocalValidatorFactoryBeand가 아니면 안된다면, 개별적으로 메시지를 정의하면 어쩔 수 없는 것 같다
Reference
이 문제에 관하여(Bean Validation에서 Error Message에 Field Name을 포함시키고 싶을 때 LocalValidatorFactoryBean에서 출력 할 수 없다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Nao3/items/92a84bd28f4de61e117a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)