Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC验证错误代码在哪里解决?_Java_Spring Mvc_Validation_Error Code - Fatal编程技术网

Java Spring MVC验证错误代码在哪里解决?

Java Spring MVC验证错误代码在哪里解决?,java,spring-mvc,validation,error-code,Java,Spring Mvc,Validation,Error Code,我试图在SpringMVC框架下编写,但文档中有一个明显的遗漏。当调用将错误传递给对象时,大多数方法都需要名为errorCode的字符串参数。如果我理解正确,这些错误代码可以作为特定错误消息的替代。但我一辈子都搞不清楚这些代码映射到哪里 下面是一个例子,我指的是SpringMVC的Javadoc public class UserLoginValidator implements Validator { private static final int MINIMUM_PASSWOR

我试图在SpringMVC框架下编写,但文档中有一个明显的遗漏。当调用将错误传递给对象时,大多数方法都需要名为errorCode的字符串参数。如果我理解正确,这些错误代码可以作为特定错误消息的替代。但我一辈子都搞不清楚这些代码映射到哪里

下面是一个例子,我指的是SpringMVC的Javadoc

 public class UserLoginValidator implements Validator {

    private static final int MINIMUM_PASSWORD_LENGTH = 6;

    public boolean supports(Class clazz) {
       return UserLogin.class.isAssignableFrom(clazz);
    }

    public void validate(Object target, Errors errors) {
       ValidationUtils.rejectIfEmptyOrWhitespace(errors, "userName", "field.required");
       ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "field.required");
       UserLogin login = (UserLogin) target;
       if (login.getPassword() != null
             && login.getPassword().trim().length() < MINIMUM_PASSWORD_LENGTH) {
          errors.rejectValue("password", "field.min.length",
                new Object[]{Integer.valueOf(MINIMUM_PASSWORD_LENGTH)},
                "The password must be at least [" + MINIMUM_PASSWORD_LENGTH + "] characters in length.");
       }
    }
 }
公共类UserLoginValidator实现验证器{
私有静态最终整数最小密码长度=6;
公共布尔支持(类clazz){
返回UserLogin.class.isAssignableFrom(clazz);
}
公共无效验证(对象目标、错误){
ValidationUtils.rejectIfEmptyOrWhitespace(错误,“用户名”,“字段.必填”);
ValidationUtils.rejectIfEmptyOrWhitespace(错误,“密码”,“字段.必填”);
UserLogin=(UserLogin)目标;
如果(login.getPassword()!=null
&&login.getPassword().trim().length()<最小密码长度){
错误。拒绝值(“密码”、“字段最小长度”,
新对象[]{Integer.valueOf(最小密码长度)},
“密码长度必须至少为[“+最小密码长度+”]个字符。”;
}
}
}
有谁能给我点化一下吗?

这些问题由您和a解决

参考手册中的相关章节:

输出与验证错误对应的消息是我们最不需要讨论的事情。在上面的示例中,我们拒绝了name和age字段。如果我们要使用
MessageSource
输出错误消息,我们将使用拒绝字段时给出的错误代码(在本例中为“name”和“age”)。当您从
Errors
接口调用(直接或间接地,例如使用
ValidationUtils
类)
rejectValue
或其他拒绝方法时,底层实现不仅会注册您传入的代码,还会注册许多其他错误代码


我正在使用默认的消息解析程序

在我的
dispatcherservlet.xml
中,我有

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="messages" />
</bean>
如果要使用自定义MessageCodesResolver,可以实现MessageCodeResolver接口,然后为给定控制器定义解析器,如下所示:

error.firstname.null=Please enter your first name.
error.lastname.null=Please enter your last name.
<bean id="myController">
  <property name="messageCodesResolver" ref="myMessageCodesResolver" />
</bean>


目前没有全局定义自定义
messagecodesolver
的方法;这里有一个。描述了一种使用bean继承使所有控制器bean从一个控制器bean定义继承的方法

出于某种原因,如果希望解析控制器中类似于form:errors jsp标记的消息,则可以执行以下操作:

   //result is BindingResult
   List<String> errors = new ArrayList<String>();
   List<ObjectError> allErrors = result.getAllErrors();
   for (ObjectError error : allErrors) {
      String message = messageSource.getMessage(error, null);
      errors.add(message);
   }
//结果是BindingResult
列表错误=新建ArrayList();
List allErrors=result.getAllErrors();
对于(ObjectError错误:allErrors){
String message=messageSource.getMessage(错误,null);
错误。添加(消息);
}

如果未指定默认实例,则使用默认实例(DefaultMessageCodesResolver)。您只需要注册一个MessageSource,它将自动使用。如何注册MessageSource?我将messageCodesResolver视为bean属性。但是有没有一种方法可以将MessageCodeResolver设置为整个应用程序的通用版本呢?感谢您提供的信息,这足以让我使用我的验证器。但是为了学习如果我想在自定义MessageCodeResolver中重新布线,我会做什么,我会去哪里?另外,prosperity ResourceBundleMessageSource的javadoc位于。如果您想使用自定义MessageCodeResolver,可以为给定的控制器分配一个。一种方法是使用bean继承使所有控制器bean从一个控制器bean定义继承,如下所述:目前没有全局定义自定义MessageCodeResolver的方法;这里有一个增强请求:作为参考,全局自定义
messagecodesolver
功能最终在Spring3.1(2011)中实现。另请参阅。我想指出,MessageSource可以在controllerin 2020中@Autowired,相关文档仍不完整:-D