数据格式化(传入String 变为对象的特殊属性Date)和数据校验

一般来说 :数据的格式化和校验是在一个模块中完成的,springMVC提供的源码也是差不多的

  1. 对属性对象的输入/输出进行格式化,从其本质上讲依然属于 “类型转换” 的范畴。
  2. Spring 在格式化模块中定义了一个实现
    ConversionService 接口的FormattingConversionService 实现类,该实现类扩展了 GenericConversionService,因此它既具有类型转换的功能,又具有格式化的功能
  3. FormattingConversionService 拥有一个
    FormattingConversionServiceFactroyBean 工厂类,后者用于在 Spring 上下文中构造前者

FormattingConversionServiceFactroyBean 内部已经注册了相关转化

  1. NumberFormatAnnotationFormatterFactroy:支持对数字类型的属性使用 @NumberFormat 注解
  2. JodaDateTimeFormatAnnotationFormatterFactroy:支持对日期类型的属性使用 @DateTimeFormat 注解

格式化示例

格式化示例

JSR 303 标准验证框架

相关注解

JSR303注解

Hibernate Validator 扩展注解

Hibernate Validator 扩展注解

Spring MVC 数据校验

Spring 4.0 拥有自己独立的数据校验框架,同时支持 JSR303 标准的校验框架。
• Spring 在进行数据绑定时,可同时调用校验框架完成数据校验工作。在 Spring MVC 中,可直接通过注解驱动的方式进行数据校验
• Spring 的 LocalValidatorFactroyBean 既实现了 Spring 的Validator 接口,也实现了 JSR 303 的 Validator 接口。只要在 Spring 容器中定义了一个
LocalValidatorFactoryBean,即可将其注入到需要数据校验的 Bean 中。
• Spring 本身并没有提供 JSR303 的实现,所以必须将JSR303 的实现者的 jar 包放到类路径下。
会默认装配好一个LocalValidatorFactoryBean,通过在处理方法的入参上标注 @valid 注解即可让 Spring MVC 在完成数据绑定后执行数据校验的工作
• 在已经标注了 JSR303 注解的表单/命令对象前标注一个
@Valid,Spring MVC 框架在将请求参数绑定到该入参对象后,就会调用校验框架根据注解声明的校验规则实施校验
• Spring MVC 是通过对处理方法签名的规约来保存校验结果的:前一个表单/命令对象的校验结果保存到随后的入参中,这个保存校验结果的入参必须是BindingResult 或Errors 类型,这两个类都位于org.springframework.validation 包中

需校验的 Bean 对象和其绑定结果对象或错误对象时成对出现的,它们之间不允许声明其他的入参

public String handle 91(@Valid User user, BindingResult userBindingResult,//一对
String sessionId,ModelMap mm,//可插入
@Valid Dept dept, Errors deptErrors//又一对){
User和其绑定结果的对象
Dept和其校验的结果对象

!需校验的 Bean 对象和其绑定结果对象或错误对象时成对出现的
之间不允许声明其他的入参

在目标方法中获取效验结果

在表单/命令对象类的属性中标注校验注解,在处理方法对应的入参前添加 @Valid,Spring MVC 就会实施校验并将校验结果保存在被校验入参对象之后的 BindingResult 或Errors 入参中。

@RequestMapping(value="/emp", method=RequestMethod.POST)
    public String save(@Valid Employee employee, Errors result, 
            Map<String, Object> map){
        System.out.println("save: " + employee);

        if(result.getErrorCount() > 0){
            System.out.println("出错了!");

            for(FieldError error:result.getFieldErrors()){
                System.out.println(error.getField() + ":" + error.getDefaultMessage());
            }

            //若验证出错, 则转向定制的页面
            map.put("departments", departmentDao.getDepartments());
            return "input";
        }

        employeeDao.save(employee);
        return "redirect:/emps";
    }

常用方法

– FieldError getFieldError(String field)
– List getFieldErrors()
– Object getFieldValue(String field)
– Int getErrorCount()

在页面上显示错误

• Spring MVC 除了会将表单/命令对象的校验结果保存到对应的 BindingResult 或 Errors 对象中外,还会将所有校验结果保存到 “隐含模型”
• 即使处理方法的签名中没有对应于表单/命令对象的结果入参,校验结果也会保存在 “隐含对象” 中。
• 隐含模型中的所有数据最终将通过 HttpServletRequest 的属性列表暴露给 JSP 视图对象,因此在 JSP 中可以获取错误信息
• 在 JSP 页面上可通过 显示错误消息
error示例

类的创建注解示例

类的创建注解示例

handler 处理示例
handler 处理示例

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要将Java中的Date对象格式化为指定格式的日期字符串,可以使用SimpleDateFormat类。 例如,下面的代码将Date对象格式化为"yyyy-MM-dd"格式的字符串: ``` Date date = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); String formattedDate = formatter.format(date); ``` 您可以使用以下字符来定义格式字符串: - y: 年份 - M: 月份 - d: 日 - H: 小时(0-23) - m: 分钟 - s: 秒 例如,要将Date对象格式化为"yyyy-MM-dd HH:mm:ss"格式的字符串,可以使用以下代码: ``` Date date = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedDate = formatter.format(date); ``` ### 回答2: 在Java中,我们可以使用SimpleDateFormat类来将Date对象的日期格式化。SimpleDateFormat可以帮助我们将日期对象转换为指定格式的字符串。 首先,我们需要创建一个SimpleDateFormat对象,并传入指定的日期格式作为参数。例如,若要将Date对象格式化为年月日的格式,我们可以使用以下代码: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 接下来,我们可以使用format()方法将Date对象格式化为字符串。如下所示: String formattedDate = sdf.format(date); 在上述代码中,date是我们想要格式化Date对象。调用format()方法,并传入date作为参数,就可以得到一个格式化后的字符串。 例如,假设我们有一个Date对象date,它表示当前日期和时间。我们想将其格式化为"yyyy年MM月dd日 HH:mm:ss"的格式,我们可以使用以下代码: SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); String formattedDate = sdf.format(date); 最后,我们可以将formattedDate打印出来或者用于其他需要日期格式的地方。 需要注意的是,SimpleDateFormat是线程不安全的,因此,在多线程环境下使用时需要注意同步问题。如果在多线程环境中使用SimpleDateFormat,可以考虑使用ThreadLocal来保证每个线程都有一个独立的SimpleDateFormat实例。 ### 回答3: 在Java中,可以使用SimpleDateFormat类来将Date对象的日期格式化。我们只需要创建一个SimpleDateFormat对象,并指定日期的格式,然后调用其format方法即可。 下面是一个简单的示例代码: ```java import java.text.SimpleDateFormat; import java.util.Date; public class DateFormattingExample { public static void main(String[] args) { Date currentDate = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedDate = dateFormat.format(currentDate); System.out.println("当前日期:" + formattedDate); } } ``` 在上述代码中,我们首先创建了一个Date对象来表示当前日期和时间。然后,创建了一个SimpleDateFormat对象,并将日期格式作为参数递给它的构造函数。在示例中,日期格式使用了"yyyy-MM-dd HH:mm:ss",表示年份-月份-日期 时:分:秒的形式。最后,我们调用format方法将Date对象格式化为指定的日期字符串,并将结果打印输出。 执行上述代码,将输出当前日期和时间的格式化结果,例如"2021-09-20 10:30:45"。 需要注意的是,SimpleDateFormat类还提供了一系列其他用于自定义日期格式的方法,例如设置时区、年份表示方式等。可以根据具体需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值