Spring - Создание объекта "Ошибки"
У меня есть такой способ:
public boolean validateMessage(String message, Errors errors) {
if (!StringUtils.hasLength(message)) {
errors.rejectValue(wrapperName + "message", "EMPTY_MESSAGE", EMPTY_MESSAGE_ERRORMSG) ;
return false ;
}
return true ;
}
Я хочу вызвать этот метод с помощью нового объекта Errors
, например:
boolean result = validateMessage("hi", new Errors()) ;
Однако этот тип экземпляра не допускается для Errors
. Пожалуйста, совет.
Если не с Errors
, я могу достичь этого, используя пустой (новый) BindingResult
Ответы
Ответ 1
Errors
и BindingResult
являются интерфейсами, поэтому они не могут быть созданы. Единственный вариант - использовать один из классов, реализующий Errors
.
Вы можете использовать org.springframework.validation.BindException
, это реализует Errors
- подробнее см. здесь.
Ответ 2
Другой вариант - использовать org.springframework.validation.BeanPropertyBindingResult, который реализует ошибки. Этот объект имеет тот же класс BindingResult, который вы получаете в Spring контроллерах MVC
Errors errors = new BeanPropertyBindingResult(objectToValidate, "objectName");
Ответ 3
вы можете создавать объекты класса. но Errors
- это интерфейс, а не класс. следовательно, он не может быть создан таким образом, как вы пытаетесь сделать.
Ответ 4
Метод ожидает объект, реализующий интерфейс Errors
. Любой класс, реализующий интерфейс Errors, будет работать. Если вы не хотите использовать существующий класс, например org.springframework.validation.BindException
, вы можете использовать анонимный внутренний класс. См. Spring Docs для существующих классов, которые уже реализуют Errors
. Но вашему анонимному классу потребуется реализовать все методы интерфейса, которые довольно многочисленны и затрудняют чтение вашего кода:
boolean result = validateMessage( "hi", new Errors() {
@Override
public void setNestedPath(String nestedPath) {
// TODO Auto-generated method stub
}
@Override
public void rejectValue(String field, String errorCode, Object[] errorArgs, String defaultMessage) {
// TODO Auto-generated method stub
}
@Override
public void rejectValue(String field, String errorCode, String defaultMessage) {
// TODO Auto-generated method stub
}
@Override
public void rejectValue(String field, String errorCode) {
// TODO Auto-generated method stub
}
@Override
public void reject(String errorCode, Object[] errorArgs, String defaultMessage) {
// TODO Auto-generated method stub
}
@Override
public void reject(String errorCode, String defaultMessage) {
// TODO Auto-generated method stub
}
@Override
public void reject(String errorCode) {
// TODO Auto-generated method stub
}
@Override
public void pushNestedPath(String subPath) {
// TODO Auto-generated method stub
}
@Override
public void popNestedPath() throws IllegalStateException {
// TODO Auto-generated method stub
}
@Override
public boolean hasGlobalErrors() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean hasFieldErrors(String field) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean hasFieldErrors() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean hasErrors() {
// TODO Auto-generated method stub
return false;
}
@Override
public String getObjectName() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getNestedPath() {
// TODO Auto-generated method stub
return null;
}
@Override
public List<ObjectError> getGlobalErrors() {
// TODO Auto-generated method stub
return null;
}
@Override
public int getGlobalErrorCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public ObjectError getGlobalError() {
// TODO Auto-generated method stub
return null;
}
@Override
public Object getFieldValue(String field) {
// TODO Auto-generated method stub
return null;
}
@Override
public Class getFieldType(String field) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<FieldError> getFieldErrors(String field) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<FieldError> getFieldErrors() {
// TODO Auto-generated method stub
return null;
}
@Override
public int getFieldErrorCount(String field) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getFieldErrorCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public FieldError getFieldError(String field) {
// TODO Auto-generated method stub
return null;
}
@Override
public FieldError getFieldError() {
// TODO Auto-generated method stub
return null;
}
@Override
public int getErrorCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public List<ObjectError> getAllErrors() {
// TODO Auto-generated method stub
return null;
}
@Override
public void addAllErrors(Errors errors) {
// TODO Auto-generated method stub
}
} );
Ответ 5
Если это приложение Spring MVC и вы используете @Controllers, вы можете передать свой объект проверки в форме org.springframework.validation.BindingResult
как часть отображения как такового:
@RequestMapping(value="login.htm", method=RequestMethod.POST)
public String doLogin(HttpServletRequest request, Model model, BindingResult errors) {
// ..... some validation code
String message = "My message";
boolean valid = validateMessage(message, errors);
// .... some more code
}
Это альтернативный способ явного создания экземпляра org.springframework.validation.Errors
.