转换器和格式化

【SpringBoot笔记35】SpringBoot自定义Converter转换器和Formatter格式化器 Converter是Spring3.0开始提供的一个类型转换器接口,使用这个接口可以将一种数据类型转换成另外一种数据类型,注意:这个接口是位于org.springframework.core.convert.converter.Converter包里面的,别导入错了。Converter接口中只提供了一个【convert()方法】,该方法就是将源对象的数据类型,转换成目标对象T的数据类型,如果类型不能转换,那么就会抛出非法参数异常。 阅读详情

Converter

    Spring的Converter是可以将一种类型转换成另一种类型的一个对象。例如,用户输入的日期可能有许多形式,如“December 25,2014”,”12/25/2014”和“214-12-25”,这些都表示同一个日期。默认情况下,Spring会期待用户输入的日期样式与当前语言区域的日期样式相同。
    为了创建Converter,必须编写一个实现org.springframework.core.converter.Converter接口的Java类。这个接口声明如下:
public interface Converter<S, T>
这里的S表示源类型,T表示目标类型。


例如,为了创建一个可以将Long转换成Date的Converter,要像下面这样声明Converter类:

 ```
 在类body中,需要编写一个来自Converter接口的conver方法实现。这个方法的签名如下:
 ``` T convert(S source) ```

样式代码

public class StringToDateConverter implements Converter<String, Date>{
    private String datePattern;//一种自己需要的固定的格式

    //无参的构造函数
    public StringToDateConverter(String datePattern) {
        this.datePattern = datePattern;
        System.out.println("instantiating .... converter with pattern:*" + datePattern);
    }

    @Override
    public Date convert(String s) {
        try{
            SimpleDateFormat dateFormat = new SimpleDateFormat(datePattern);
            dateFormat.setLenient(false);
            return dateFormat.parse(s);
        }catch(ParseException e){
            throw new IllegalArgumentException("invalid date format. Please use this pattern\"" + datePattern + "\"");
        }
    }

}

为了使用Spring MVC应用程序中定制的COnverter,需要在Spring MVC配置文件编写一个conversionService bean.Bean的类名称必须为org.springframework.context.support.COncersionServiceFactoryBean.这个Bean必须包含一个COnverters属性,他将列出要在应用程序中使用所有定制Converter.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd 
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        ">
        <context:component-scan base-package="controller"></context:component-scan>
        <mvc:annotation-driven/>
        <mvc:resources mapping="/css/**" location="/css/"></mvc:resources>
        <mvc:resources location="/" mapping="/*.html"></mvc:resources>
        <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <property name="suffix" value=".jsp"></property>
        </bean>

        <!-- 转换时间的bean方法 -->
        <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
            <property name="formatters">
                <set>
                    <bean class="formatter.DateFormatter">
                        <constructor-arg type="java.lang.String" value="MM-dd-yyyy"/>
                    </bean>
                </set>
            </property>
        </bean>
</beans>

Formatter

    Formatter就像Converter一样,也是将一种类型转换成另一种类型。但是,Formatter的源类型必须是一个·String,而Converter则适用于任意的源类型。Formatter更适合Web层,而Converter则可以用在任意层中。为了转换Spring MVC应用程序表单的用户输入,始终应该选择Formatter,而不适Converter。
   为了创建Formatter,要编写一个实现org.springframework.format.Formatter接口的Java类。

public interface Formatter<T>

这里的T表示输入字符串要转换的目标类型。该接口有parse和print两个方法,所有实现都必须覆盖。

T parse(String text, java.util.Locale locale)
string print(T object, java.util.Locale locale)

parse方法利用指定的Locale将一个String解析成目标类型。print方法与之相反,它是返回目标对象的字符串表示法。
演示代码

package formatter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import org.springframework.format.Formatter;

public class DateFormatter implements Formatter<Date>{
    private String datePattern;//要转换的格式
    private SimpleDateFormat dateFormat;

    public DateFormatter(String datePattern) {
        this.datePattern = datePattern;
        dateFormat = new SimpleDateFormat(datePattern);
        dateFormat.setLenient(false);//是否严格的限制格式
    }

    @Override
    public String print(Date date, Locale locale) {
        return dateFormat.format(date);//将时间转化成日期
    }

    @Override
    public Date parse(String s, Locale locale) throws ParseException {
        try{
            return dateFormat.parse(s);//将日期转化成时间
        }catch(Exception e){
            throw new IllegalArgumentException("invalid date format. please use this pattern\"" + datePattern + "\"");
        }
    }

}

xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd 
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        ">
        <context:component-scan base-package="controller"></context:component-scan>
        <context:component-scan base-package="formatter"></context:component-scan>
        <mvc:annotation-driven conversion-service="conversionService"/>
        <mvc:resources mapping="/css/**" location="/css/"></mvc:resources>
        <mvc:resources location="/" mapping="/*.html"></mvc:resources>
        <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <property name="suffix" value=".jsp"></property>
        </bean>

         <!-- 转换时间的bean方法 -->
        <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
            <property name="formatters">
                <set>
                    <bean class="formatter.DateFormatter ">
                        <constructor-arg type="java.lang.String" value="MM-dd-yyyy"/>
                    </bean>
                </set>
            </property>
        </bean>
        <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
            <property name="basename" value="/WEB-INF/resource/message"></property>
        </bean>

</beans>

选择Converter,还是Formatter
    Converter是一般工具,可以将一种类型转换成另一种类型。例如,将String转换成Date,或者将Long转换成Date。Converter既可以用在Web层,也可以用在其他层中。
    Formmtter只能将String转换成另一种Java类型。例如,将String转换成Date,但它不能将Long转换成Date。因此,Formatter更适合Web层。为此,在SpringMVC应用程序中,选择Formmatter比选择Converter和适合。

[网络安全自学篇] 六.OllyDbg动态分析工具基础用法及Crakeme逆向破解 这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步。上一篇文章分享了IDA Pro反汇编工具的基础用法,并简单讲解一个EXE逆向工程解密实战方法;本篇文章将讲解动态分析OllyDbg工具的基础用法,主要是结合两个Crakeme案例逆向破解。希望对初学者有帮助,大神请飘过,谢谢各位看官! 阅读详情

相关推荐

S7-200SMART系列全套接线说明

SMART200接线方法,输入,输出,模拟量,面板,扩展糟等,并且详细说明接线原理。

文都龙哥 1万+

SpringMVC-转换器与格式化

不知道大家有没有好奇,即使通过各种形式,完成了表单参数与形参上的映射,但表单参数实际上传递的都是字符串,它又是如何赋值给形参中的int、double、datetime等等这些类型中的呢,这也是数据绑定的一种表现形式,同时也是最典型最显著的一种形式。

见习日志 2322

S/4中的16种特殊库存类型

S/4中的16种特殊库存类型

yanzibing99的博客 1万+

SpringMVC实战教程 | 第七篇:SpringMVC转换器和格式化

Converter Spring的Converter可以将一种类型转换另一种类型的对象,例如:如果希望Spring在将输入的日期字符串绑定到Date时,使用不同的日期样式,需要使用Converter来将字符串转换日期 创建Converter需要实现Converter&lt; String,Date &gt;接口 StringToDateConverter 负责将字符串转换日期 p...

w 964

别再硬编码了!WinCC子画面动态加载的5种C脚本写法对比

本文深入解析WinCC子画面动态加载的5种C脚本实现方案,包括基础加载、路径动态解析、多语言切换、窗口自适应布局和混合架构交互。通过代码示例和场景分析,帮助开发者避免硬编码问题,提升工业自动化系统的交互效率和可维护性。特别推荐路径动态解析方案,有效解决项目路径管理的痛点。

weixin_29008691的博客 475

数据库存储分层架构搭建:热数据 SSD 存储、冷数据归档的配置操作及性能对比分析

本文探讨了数据库存储分层架构的优化策略。随着数据量激增,传统单一存储模式面临成本与性能的平衡难题。文章提出通过热数据SSD加速和冷数据归档降本的分层方案,系统分析了热数据SSD配置、冷数据归档操作及性能对比。分层架构基于数据活跃度匹配存储介质,使热数据保持高性能访问,冷数据低成本存储,实现总体成本降低60%-80%的同时确保核心查询性能。文中详细介绍了硬件选型、数据库配置、数据迁移等技术细节,并强调了动态调整分层策略的重要性,为构建高效经济的数据库存储体系提供了完整解决方案。

jingjing45678的博客 1286

【720科技SpringMVC】第六课:转换器和格式化、验证器

内容关键词:转换、格式化、验证器知识来源: 720科技(张森鹏)一、知识笔记Spring 的 Converter 是可以将一种类型转换成另一种类型的一个对象。 例如,用户输入的日期可能有许多种形式,如“December 25, 2014”“12/25/2014”和“2014-12-25”,这些都表示同一个日期。默认情况下, Spring 会期待用户输入的日期样式与当前语言区域的日期样式相同。例如,...

qq_41950122的博客 331

一文读懂“数据分发服务DDS”(Data Distribution Service,RTPS,OMG)

DDS 数据分发服务(Data Distribution Service) 数据分发服务DDS(DataDistributionService)是对象管理组织(OMG)在HLA及CORBA等标准的基础上制定的新一代分布式实时通信中间件技术规范,DDS采用发布/订阅体系架构,强调以数据为中心,提供丰富的QoS服务质量策略,能保障数据进行实时、高效、灵活地分发,可满足各种分布式实时通信应用需求。DDS...

DDS技术交流推广大本营 4万+

SpringMVC的类型转换器和数据格式化(九)

SpringMVC的类型转换器 Convert 和数据格式化 Formatter的使用

两个蝴蝶飞 2465

UniApp实现多端支付功能完整实现指南

支付业务流程多端支付实现安全性保障异常处理最佳实践支付基础知识多端支付实现统一支付封装安全性处理异常处理最佳实践根据具体业务场景选择合适的支付方式注重安全性和用户体验做好异常处理和日志记录持续优化和改进支付流程关注我,持续分享前端项目开发经验!

weixin_63454527的博客 2128

3. LangGraph快速入门

本示例中,我们将使用 Claude Sonnet 4.5 模型,并定义加法、乘法、除法工具。# 定义工具@toolArgs:"""@toolArgs:"""@toolArgs:"""# 为大模型绑定工具图的状态用于存储消息和大模型调用次数。LangGraph 中的状态在整个智能体执行过程中保持持久化。使用带的Annotated类型可以确保新消息追加到现有列表,而不是替换列表。模型节点用于调用大模型,并决定是否调用工具。return {],

Long_像风一样自由 842

SpringMVC(8)——格式化转换器Formatter

目录 概述 内置的格式化转换器 自定义格式化转换器 创建实体类 创建控制器类 创建自定义格式化转换器类 注册格式化转换器 其他JSP页面 运行效果 概述 SpringMVC框架的Formatter<T>与Converter<S,T>一样,也是一个可以将一种数据类型转换成另一种数据类型的接口。不同的是,Formatter<T>的源数据类型必须...

二木成林 1219

麒麟系统无法进入单用户模式该怎么办?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 备注:部分问题/疑难杂症搜集于互联网。

**My Coding Family** 1820

SpringMVC的类型转换器和数据格式化

一. 类型转换器 前端传入的值,从表单中传入的值,都是字符串或者是字符串数组的形式传入的,在后端需要进行手动的转换类型,然后才能正确的使用。 框架一般对常见的数据类型的转换进行了封装提供,如字符串转换成数字等。 SpringMVC 也提供了一些内置的转换器。 有标量的转换器,即字符串到数字,字符串到Boolean等。 (图片引用于: http://c.biancheng.net/view/4415.html) 也有集合类型的转换器, 如数组到集合, 拼接型字符器(如,) 到集合等。 (图片引用于:

u012045045的博客 1257

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

SpringMVC 之 格式化器和转换器(五)

SpringMVC 之 格式化器和转换器(五)

老猫喜欢今日爬山的博客 538

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Springmvc类型转换器和Date时间的格式化转换器

相关的包结构: SpringMvc的配置文件的配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"

有时间可以指导毕业设计,可以私聊我。一个热爱编程的smallCuteMonkey,可以私信我 372

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【笔记】Spring MVC学习指南(六)转换器和格式化

第六章介绍了转换器和格式化这两个知识点。由于Spring总是试图用默认的语言区域将日期输入绑定到java.util.Date,为了使Spring使用不同的日期格式,就需要用到Converter(转换器)或者Formatter(格式化)。前者是通用性质的,后者更专注于Web层。 先来看转换器。如果要使用Spring的转换器功能,需要自己编写一个类,实现Converter接口。 package a

yesterday you said tomorrow 1496

6.转换器和格式化

1.Converter:转换器 :可以在应用程序的任意层中使用 2.Formatter格式化:专门为Web设计 二者都可以将一种对象转换成另一种对象类型   1.Converter 必须实现org.springframework.core.convert.converter.Converter public interface Converter&lt;S,T&gt; S:是源类型 ...

weixin_34032621的博客 140

软件开发实训(720科技)――第六课:转换器和格式化、验证器

软件开发实训(720科技)――第六课:转换器和格式化、验证器内容关键词:转换、格式化、验证器授课老师:张森鹏一、知识笔记1. Coonnveerrtteer r     Spring 的 Converter 是可以将一种类型转换成另一种类型的一个对象。例如,用户输入的日期可能有许多种形式,如“December 25,2014”“12/25/2014”和“2014-12-25”,这些都表示同一个日期...

xy123456789123的博客 266

Spring MVC -- 转换器和格式化

在Spring MVC -- 数据绑定和表单标签库中我们已经见证了数据绑定的威力,并学习了如何使用表单标签库中的标签。但是,Spring的数据绑定并非没有任何限制。有案例表明,Spring在如何正确绑定数据方面是杂乱无章的。下面举两个例子: 1)在Spring MVC -- 数据绑定和表单标签库中的tags-demo应用中,如果在/input-book页面输入一个非数字的价格,然后点击”Add ...

weixin_30363817的博客 265

梳理4转换器和格式化

1.Converter--将一种类型转换成另一种类型。  a,编写Converter接口,编写ConverterDemo类实现接口。 b,配置文件中编写conversionService bean. conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">  

qq_26915707的博客 224

spring 转换器和格式化

  Spring总是试图用默认的语言区域将日期输入绑定 到java.util.Date。假如想让Spring使用不同的日期样 式,就需要用一个Converter(转换器)或者 Formatter(格式化)来协助Spring完成。 一.Converter   利用Converter进行日期的格式化   Spring的Converter是一个可以将一种类型转换成另 一种类型的对象。例如,用户输...

weixin_30776863的博客 167

SpringMVC前后端时间格式化和配置时间转换器

一、后台配置日期格式: 为什么要配置时间转换器: 由于前端传送到后端的时间类型数据不是Date类型的,而是String类型的,后台controller接收日期数据时会报400 The request sent by the client was syntactically incorrect (),即前端传输到后台的数据类型不匹配,为了解决这个问题,可以将controller那里的日期参数改为St...

weixin_41145945的博客 511

SpringBoot-09 MVC自动配置原理 内容协商视图解析器 转换器和格式化器 修改SpringBoot的默认配置 @EnableWebMvc

官网阅读 在进行项目编写前,我们还需要知道一个东西,就是SpringBoot对我们的SpringMVC还做了哪些配置,包括如何扩展,如何定制。 只有把这些都搞清楚了,我们在之后使用才会更加得心应手。途径一:源码分析,途径二:官方文档! 地址 :https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/htmlsingle/#boot-features-spring-mvc-auto-configuration Spring MVC Aut

answero的博客 360

SpringMVC学习之三转换器和格式化

序:数据绑定并非没有限制,有案例表明Spring在如何正确绑定数据方面是杂乱无章的。例如,Spring总是试图用默认的语言区域将日期输入绑定到Java.util.Date。如果想让Spring使用不同的时间格式,就需要一个Converter(转换器)和Formatter(格式化) 1.Converter  可以将一种类型转换为另一个种类型的对象,可用于任何层 创建Converter,必须编

Pruett的博客 704

实训小笔记之—第6章 转换器和格式化

第6章 转换器和格式化      本章主要学习了Converter 和Formatter 的内容。这两者均可用于将一种对象类型转换成另一种对象类型。Converter 是通用元件,可以在应用程序的任意层中使用,而Formatter 则是专门为Web 层设计的。      Spring 的Converter 是可以将一种类型转换成另一种类型的一个对象。例如,用户输入的日期可能有许多种形式,如“Dec...

H_yuxiang2018的博客 233
上一篇: 海盗分金币
下一篇: 李白打酒
LuFei_java
博客等级 码龄10年 1粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值