SpringMVC - 数据格式化(@DateTimeFormat & @NumberFormat)(二)

简介: SpringMVC - 数据格式化(@DateTimeFormat & @NumberFormat)(二)

2、这次用DefaultFormattingConversionService来做演示,把FormatController.java改为如下内容:

package com.demo.web.controllers;
import java.math.RoundingMode;
import java.util.Date;
import org.springframework.format.datetime.DateFormatter;
import org.springframework.format.number.CurrencyFormatter;
import org.springframework.format.support.DefaultFormattingConversionService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.demo.web.models.FormatModel;
@Controller
@RequestMapping(value = "/format")
public class FormatController {
    @RequestMapping(value="/test", method = {RequestMethod.GET})
    public String test(Model model) throws NoSuchFieldException, SecurityException{
        if(!model.containsAttribute("contentModel")){
            FormatModel formatModel=new FormatModel();
            CurrencyFormatter currencyFormatter = new CurrencyFormatter();  
            currencyFormatter.setFractionDigits(2);//保留2位小数
            currencyFormatter.setRoundingMode(RoundingMode.HALF_UP);//向(距离)最近的一边舍入,如果两边(的距离)是相等的则向上舍入(四舍五入)
            DateFormatter dateFormatter=new DateFormatter();
            dateFormatter.setPattern("yyyy-MM-dd HH:mm:ss");
            DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();  
            conversionService.addFormatter(currencyFormatter); 
            conversionService.addFormatter(dateFormatter); 
            formatModel.setMoney(conversionService.convert(12345.678, String.class));
            formatModel.setDate(conversionService.convert(new Date(), String.class));    
            model.addAttribute("contentModel", formatModel);
        }
        return "formattest";
    }
}

这次没有了Locale locale=LocaleContextHolder.getLocale();再次运行测试并更改语言后刷新,可以看到与第一种方法截图同样的效果,说明DefaultFormattingConversionService会自动根据浏览器请求的信息返回相应的格式。


3、估计有人会觉得,啊…我只是想要格式化显示而已,还要这么麻烦,写代码一个字段一个字段的转换???别急,上面只是对内置的格式化转换器做一下演示,实际项目中肯定不会这么用的,下面就介绍一下基于注解的格式化。首先把FormatModel.java改为如下内容:

package com.demo.web.models;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.NumberFormat;
import org.springframework.format.annotation.NumberFormat.Style;
public class FormatModel{
    @NumberFormat(style=Style.CURRENCY)
   private double money;
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date date;
    public double getMoney(){
        return money;
    }
    public Date getDate(){
        return date;
    }
    public void setMoney(double money){
        this.money=money;
    }
    public void setDate(Date date){
        this.date=date;
    }
}

注意:这里的money和date不再是String类型,而是它们自己本来的类型。

把FormatController.java改为如下内容:

package com.demo.web.controllers;
import java.util.Date;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.demo.web.models.FormatModel;
@Controller
@RequestMapping(value = "/format")
public class FormatController {
    @RequestMapping(value="/test", method = {RequestMethod.GET})
    public String test(Model model) throws NoSuchFieldException, SecurityException{
        if(!model.containsAttribute("contentModel")){
            FormatModel formatModel=new FormatModel();
            formatModel.setMoney(12345.678);
            formatModel.setDate(new Date());
            model.addAttribute("contentModel", formatModel);
        }
        return "formattest";
    }
}

注意:这里代码里面只有赋值已经没有格式化的内容了。

更改视图formattest.jsp的内容如下:


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    money:<br/>
    <spring:eval expression="contentModel.money"></spring:eval><br/>
    date:<br/>
    <spring:eval expression="contentModel.date"></spring:eval><br/>
</body>
</html>

注意:这里需要添加引用<%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>,并用spring:eval来绑定要显示的值。

运行测试更改浏览器语言然后刷新页面依然可以看到以第一种方法截图相同的效果,证明注解有效。

目录
相关文章
|
前端开发 Java Spring
springMVC--数据格式化
springMVC--数据格式化
92 0
|
前端开发 安全 Java
详细解读_SpringMvc类型转换&数据格式化&数据验证
详细解读_SpringMvc类型转换&数据格式化&数据验证
|
Java Spring
SpringMVC - 数据格式化(@DateTimeFormat & @NumberFormat)(一)
SpringMVC - 数据格式化(@DateTimeFormat & @NumberFormat)(一)
277 0
SpringMVC - 数据格式化(@DateTimeFormat & @NumberFormat)(一)
|
前端开发
SpringMVC的类型转换器和数据格式化(九)下
SpringMVC的类型转换器和数据格式化(九)
293 0
SpringMVC的类型转换器和数据格式化(九)下
|
前端开发 Java
SpringMVC的类型转换器和数据格式化(九)中
SpringMVC的类型转换器和数据格式化(九)
171 0
SpringMVC的类型转换器和数据格式化(九)中
SpringMVC的类型转换器和数据格式化(九)上
SpringMVC的类型转换器和数据格式化(九)
243 0
SpringMVC的类型转换器和数据格式化(九)上
|
XML JSON 前端开发
springmvc4整合AJAX使用@ResponseBody注解返回JSON数据格式
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/53433325   ...
1272 0
|
容器 前端开发
SpringMVC 中 数据格式化
FormattingConversionServiceFactoryBean内部已经注册了: - NumberFormatAnnotationFormatterFactroy:支持对数字类型的属性使用@NumberFormat注解。 - JodaDateTimeFormatAnnotationFormatterFactroy:支持对日期类型的属性使用@DataTime
1432 0
|
前端开发 Java Spring
springMVC4(11)使用注解完成数据格式化
<div class="markdown_views"> <h1 id="需求实例引入">需求实例引入</h1> <p>在实际开发中,我们会常常遇到需要对日期格式、数值格式进行转换的需求。在spring中,我们可以轻松通过注解的方式完成对数据的格式化处理,比如现在有个User POJO类: <br> package com.mvc.model;</p> <pre cla
2768 0
|
6月前
|
设计模式 前端开发 JavaScript
Spring MVC(一)【什么是Spring MVC】
Spring MVC(一)【什么是Spring MVC】