精华内容
下载资源
问答
  • 2021-12-23 15:58:22
    自动类型转换

    SpringMVC 对基本数据类型提供了自动的类型转换

    如:请求参数传入“100”字符串,我们实体类中需要的是 Integer 类型,那么 SpringMVC 会自动将字符串转换为 Integer 类型注入实体类。

    日期和数值类型转换
    注解设定数据格式

    SpringMVC提供了一些注解,可以让我们进行一些手动类型转换

    DateTimeFormat注解:可以对日期时间类型进行转换

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date productDate;
    

    NumberFormat注解:可以对数值类型进行转换

    @NumberFormat(pattern = "###,###,###.###")
        private Double productPrice;
    

    自定义类型转换器

    创建实体类,视图类里面包含存储的表单对应的值

    编写自定义类型转换器:

      1. 写一个类实现Converter接口
      1. 重写convert方法进行转换
      1. 在springmvc的配置文件中配置类型转换器

    实现接口:org.springframework.core.convert.converter.Converter<S,T>

    泛型 S:源类型(本例中是 String 类型)

    泛型 T:目标类型(本例中是 Address 类型)

    然后在springmvc里面配置注册类型的转换器

    <!-- 在 mvc:annotation-driven 中注册 FormattingConversionServiceFactoryBean -->
    <mvc:annotation-driven conversion-service="formattingConversionService"/>
     
    <!-- 在 FormattingConversionServiceFactoryBean 中注册自定义类型转换器 -->
    <bean id="formattingConversionService"
          class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <!-- 在 converters 属性中指定自定义类型转换器 -->
        <property name="converters">
            <set>
                <bean class="com.wwb.mvc.converter.AddressConverter"/>
            </set>
        </property>
     
    </bean>
    
    更多相关内容
  • springMVC类型转换

    千次阅读 2022-05-17 15:39:11
    1)标量转换器 2)集合、数组相关转换器 自定义类型转换器 1、定义类型转换器 2、注册类型转换器 ...内置的类型转换器在Spring MVC 框架中,对于常用的数据类型,开发者无须创建自己的类型转换器,因为 S.

    1)标量转换器

    2)集合、数组相关转换器

    自定义类型转换器

    1、定义类型转换器

    2、注册类型转换器

    方法一

    方法二

    3、页面访问

    4、接收请求

    Spring MVC 框架的 Converter 是一个可以将一种数据类型转换成另一种数据类型的接口,这里 S 表示源类型,T 表示目标类型。开发者在实际应用中使用框架内置的类型转换器基本上就够了,但有时需要编写具有特定功能的类型转换器。

    内置的类型转换器在Spring MVC 框架中,对于常用的数据类型,开发者无须创建自己的类型转换器,因为 Spring MVC 框架有许多内置的类型转换器用于完成常用的类型转换。Spring MVC 框架提供的内置类型转换包括以下几种类型。

    (1)标量转换器

    名称

    作用

    StringToBooleanConverter

    String 到 boolean 类型转换

    ObjectToStringConverter

    Object 到 String 转换,调用 toString 方法转换

    StringToNumberConverterFactory

    String 到数字转换(例如 Integer、Long 等)

    NumberToNumberConverterFactory

    数字子类型(基本类型)到数字类型(包装类型)转换

    StringToCharacterConverter

    String 到 Character 转换,取字符串中的第一个字符

    NumberToCharacterConverter

    数字子类型到 Character 转换

    CharacterToNumberFactory

    Character 到数字子类型转换

    StringToEnumConverterFactory

    String 到枚举类型转换,通过 Enum.valueOf 将字符串转换为需要的枚举类型

    EnumToStringConverter

    枚举类型到 String 转换,返回枚举对象的 name 值

    StringToLocaleConverter

    String 到 java.util.Locale 转换

    PropertiesToStringConverter

    java.util.Properties 到 String 转换,默认通过 ISO-8859-1 解码

    StringToPropertiesConverter

    String 到 java.util.Properties 转换,默认使用 ISO-8859-1 编码

    (2)集合、数组相关转换器

    名称

    作用

    ArrayToCollectionConverter

    任意数组到任意集合(List、Set)转换

    CollectionToArrayConverter

    任意集合到任意数组转换

    ArrayToArrayConverter

    任意数组到任意数组转换

    CollectionToCollectionConverter

    集合之间的类型转换

    MapToMapConverter

    Map之间的类型转换

    ArrayToStringConverter

    任意数组到 String 转换

    StringToArrayConverter

    字符串到数组的转换,默认通过“,”分割,且去除字符串两边的空格(trim)

    ArrayToObjectConverter

    任意数组到 Object 的转换,如果目标类型和源类型兼容,直接返回源对象;否则返回数组的第一个元素并进行类型转换

    ObjectToArrayConverter

    Object 到单元素数组转换

    CollectionToStringConverter

    任意集合(List、Set)到 String 转换

    StringToCollectionConverter

    String 到集合(List、Set)转换,默认通过“,”分割,且去除字符串两边的空格(trim)

    CollectionToObjectConverter

    任意集合到任意 Object 的转换,如果目标类型和源类型兼容,直接返回源对象;否则返回集合的第一个元素并进行类型转换

    ObjectToCollectionConverter

    Object 到单元素集合的类型转换

    类型转换是在视图与控制器相互传递数据时发生的。Spring MVC 框架对于基本类型(例如 int、long、float、double、boolean 以及 char 等)已经做好了基本类型转换。例如,对于 add.jsp 的提交请求,可以由以下处理方法来接收请求参数并处理:

    @RequestMapping("/member/save.do")
    public ModelAndView save(String name,int age){
        ModelAndView mv=new ModelAndView();
        mv.setViewName("index");
        mv.addObject("name",name);
        mv.addObject("age",age);
        return mv;
    }

    自定义类型转换器

    当 Spring MVC 框架内置的类型转换器不能满足需求时,开发者可以开发自己的类型转换器。

    如有需求: 添加人员信息时,要求: 名称,年龄 格式

     

    1、定义类型转换器

    自定义类型转换器类需要实现 Converter 接口,重写 convert(S) 接口方法。convert(S) 方法的功能是将源数据类型 S 转换成目标数据类型 T。

    public class MemberConvert implements Converter<String, Member> {
        @Override
        public Member convert(String source) {
            //定义Member
            Member member=new Member();
            //将目标值按 ,  分隔
            String []gdt=source.split(",");
            if(null!=gdt&&gdt.length==2){
               member.setName(gdt[0]);
               member.setAge(Integer.parseInt(gdt[1]));
            }
            return member;
        }
    }

    2、注册类型转换器

    方法一

    <!--注册类型转换器-->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
           <set>
               <bean class="com.by.convert.MemberConvert"/>
           </set>
        </property>
    </bean>
    <!--开启springMVC框架注解的支持,增加类型转换器,使其生效-->
    <mvc:annotation-driven conversion-service="conversionService"/>

    方法二

    <!--注册类型转换器-->
    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="com.by.convert.MemberConvert"/>
            </set>
        </property>
    </bean>
    <!--开启springMVC框架注解的支持,增加类型转换器,使其生效-->
    <mvc:annotation-driven conversion-service="conversionService"/>

    ConversionServiceFactoryBean 与 FormattingConversionServiceFactoryBean 继承结构关系:

     

     

    框架的 Formatter 与 Converter 一样,也是一个可以将一种数据类型转换成另一种数据类型的接口。不同的是,Formatter 的源数据类型必须是 String 类型,而 Converter 的源数据类型是任意数据类型。在 Web 应用中由 HTTP 发送的请求数据到控制器中都是以 String 类型获取,因此在 Web 应用中选择 Formatter 比选择 Converter 更加合理。

    3、页面访问

    <form  method="post" action="/savemember.do">
         会员信息:<input type="text" name="member" placeholder="请输入  名称,年龄 " class="ipt">
          <input type="submit" value="提交">
    </form>

    4、接收请求

     

    展开全文
  • --格式化 转换 服务工厂 : 生产转换器--> <bean class="org.springframework.format.support.FormattingConversionServiceFactoryBean" id="formattingConversionService"> <property name="converters"> <list> ...
    1. 实现Converter<S,T> 接口
    @Component
    public class String2DateConverter implements Converter<String, Date> {
        @Override
        public Date convert(String s) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            try {
                return sdf.parse(s);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    
    1. 配置Converter的工厂bean对象 FormattingConversionServiceFactoryBean
    <!--格式化  转换  服务工厂   : 生产转换器-->
        <bean class="org.springframework.format.support.FormattingConversionServiceFactoryBean" id="formattingConversionService">
            <property name="converters">
                <list>
                    <bean class="com.cj.converter.String2DateConverter" id="string2DateConverter2"/>
                </list>
            </property>
        </bean>
    
    1. 将这个工厂bean对象注入到适配器中
    <!--    HandlerMapping   HandlerAdapter-->
    <!--FormattingConversionServiceBeanFactory实例注册到适配器上-->
        <mvc:annotation-driven  conversion-service="formattingConversionService"></mvc:annotation-driven>
    

    遇到的问题:
    springboot中自定义converter失效:
    如果你的配置继承了 WebMvcConfigurationSupport ,在里面重写 addFormatters方法。注册你自己写好的Converter

    @Configuration
    public class DateFormatConfig extends WebMvcConfigurationSupport {
    
        @Bean
        public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter(){
            MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
            converter.setObjectMapper(objectMapper);
            return converter;
        }
    
        @Override
        protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
            converters.add(jackson2HttpMessageConverter());
        }
    
         /*
          * @MethodDesc: < 注册全局转换器 >   只是添加converter,系统自带的converter没有消失
          */
         @Override
         protected void addFormatters(FormatterRegistry registry) {
            registry.addConverter(new DateConverter());
        }
    }
    

    引用:https://blog.csdn.net/qq_33873013/article/details/105770304

    展开全文
  • 一般JSP+Servlet需要开发者自己在Servlet中进行类型转换,并将其封装成对象,比较繁琐,对于SpringMVC框架而言,他必须将请求参数转换成值对象中各属性对应的数据类型,SpringMVC的Convert是一个可以将一种数据类型...

    SpringMVC类型转换器Converter

    在SpringMVC框架中需要收集用户请求参数,并将请求参数传递给应用的控制器组件,所有的请求参数都只能是字符串数据类型,SpringMVC框架必须将这些字符串转换成相应的数据类型。 一般JSP+Servlet需要开发者自己在Servlet中进行类型转换,并将其封装成对象,比较繁琐,对于SpringMVC框架而言,他必须将请求参数转换成值对象中各属性对应的数据类型,SpringMVC的Convert是一个可以将一种数据类型转换成另一种数据类型的接口,一般开发者在实际应用中使用框架内置的类型转换器就可以,但有时需要编写具有特定功能的类型转换器

    • 注意:在使用内置转换器时候,请求参数输入值和接收参数的类型要一致,否则会报错。

    下面演示一下自定义Converter类型转换器。
    1-创建web应用,并导入相关jar包。
    2-在index.jsp页面创建输入信息采集视图,该视图点击提交按钮后,映射到相应的控制器处理。

    <%--
      Created by IntelliJ IDEA.
      User: nuist__NJUPT
      Date: 2021/9/29
      Time: 8:40
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    <html>
      <head>
        <title>$Title$</title>
      </head>
      <body>
      <form action="${pageContext.request.contextPath}/my/converter" method="post">
    请输入商品信息(格式为apple,110.58,200)
      <input type = "text" name = "goodsMeal"/><br>
      <input type = "submit" value = "提交"/>
      </form>
      </body>
    </html>
    
    

    3-创建pojo包,在该包中创建GoodsMeal类,用于传递参数到controller

    public class GoodsMeal {
        private String goodsName ;
        private double goodsPrice ;
        private int goodsNumber ;
    
        public String getGoodsName() {
            return goodsName;
        }
    
        public void setGoodsName(String goodsName) {
            this.goodsName = goodsName;
        }
    
        public double getGoodsPrice() {
            return goodsPrice;
        }
    
        public void setGoodsPrice(double goodsPrice) {
            this.goodsPrice = goodsPrice;
        }
    
        public int getGoodsNumber() {
            return goodsNumber;
        }
    
        public void setGoodsNumber(int goodsNumber) {
            this.goodsNumber = goodsNumber;
        }
    }
    
    

    4-创建controller包,在该包中创建控制器类
    ConverterController,用于接收请求参数,并将相应参数转换对应的类型。

    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import pojo.GoodsMeal;
    
    @Controller
    @RequestMapping("/my")
    public class ConverterController {
        @RequestMapping("/converter")
        public String myConverter(GoodsMeal gm, Model model){
            model.addAttribute("goodsMeal", gm) ;
            return "showGoods" ;
        }
    }
    
    

    5-创建converter包,在改包中创建自定义类型装换器,完成类型转换。

    
    import org.springframework.core.convert.converter.Converter;
    import pojo.GoodsMeal;
    
    //源类型String类型,目标类型GoodsMeal
    public class GoodsConverter implements Converter<String, GoodsMeal> {
        @Override
        public GoodsMeal convert(String s) {
            GoodsMeal goodsMeal = new GoodsMeal() ;
            String [] values = s.split(",") ;
            if(values != null && values.length == 3){
                goodsMeal.setGoodsName(values[0]) ;
                goodsMeal.setGoodsPrice(Double.parseDouble(values[1])) ;
                goodsMeal.setGoodsNumber(Integer.parseInt(values[2])) ;
                return goodsMeal ;
            }else{
                throw new IllegalArgumentException("格式转换错误") ;
            }
        }
    }
    
    

    6-在web.xml配置DispatcherServlet,用于总的控制

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
             http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             id = "WebApp_ID" version="4.0">
        <!--部署DispatcherServlet-->
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>WEB-INF/springmvc-servlet.xml</param-value>
            </init-param>
            <!--表示容器启动时加载的servlet-->
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <!--任意的请求都通过DispatcherServlet-->
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>
    
    

    7-在WEB-INF拆创建配置文件springmvc-servlet.xml,在该配置文件中扫描controller包,使注解生效,注册自定义类型转换器同时启动转换器,注册视图解析器。

    <?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:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
            https://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        <!--使用扫描机制,扫描控制器类-->
        <context:component-scan base-package="controller"/>
        <mvc:annotation-driven/>
        <!--注册类型转换器GoodsConverter-->
        <bean id = "conversionService" class = "org.springframework.context.support.ConversionServiceFactoryBean">
            <property name = "converters">
                <list>
                    <bean class = "converter.GoodsConverter"/>
                </list>
            </property>
        </bean>
        <!--启动注册的类型转换器-->
        <mvc:annotation-driven conversion-service="conversionService"/>
        <!--annotation-driven用于简化开发的配置,注解DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter-->
        <!--使用resources过滤掉不需要dispatcherservlet的资源,例如静态资源,在使用resources时必须使用annotation-driven,否则resources会阻止任意控制器被调用-->
    
    
    
        <!--配置视图解析器-->
        <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver" id = "internalResourceViewResolver">
            <!--前缀-->
            <property name = "prefix" value = "/WEB-INF/jsp/"/>
            <!--后缀-->
            <property name = "suffix" value = ".jsp"/>
        </bean>
    </beans>
    
    
    
    

    8-在WEB-INF下创建jsp目录,在该目录中创建信息显示页面showGoods.jsp,在该页面中通过EL表达式取出model中的goodsMeal的信息。

    <%--
      Created by IntelliJ IDEA.
      User: nuist__NJUPT
      Date: 2021/9/29
      Time: 9:23
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    您创建的商品信息如下:<br>
    <!--使用EL表达式取出model中的goodsMeal的信息-->
    商品的名称为:${goodsMeal.goodsName}
    商品的价格为:${goodsMeal.goodsPrice}
    商品的数量为:${goodsMeal.goodsNumber}
    </body>
    </html>
    
    

    工作过程:首先通过index.jsp页面输入信息,点击提交,客户端请求提交到DispatcherServlet,由DispatcherServlet找到Requestmapping映射到指定的控制器,该控制器调用自定义类型转换类转换完成后,返回ModelAndView,视图解析器解析后,进入主页面,主页面通过EL表达式取出model对象中goodsMeal的值。

    展开全文
  • 主要介绍了SpringMVC自定义类型转换器实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • springmvc类型转换.md

    2020-07-16 11:48:12
    springmvc类型转换.md
  • SpringMVC类型转换

    2022-06-12 21:02:39
    SpringMVC类型转换
  • SpringMVC捕获异常只需要实现接口org.springframework.web.servlet.HandlerExceptionResolver,即可自定义返回异常,如:属性转换异常 @RequestMapping("/test") @ResponseBody public String str(Integer age)...
  • SpringMVC-类型转换

    2021-05-09 13:25:41
    SpringMVC类型转换SpringMVC进行自动转换,由convert接口实现。 <mvc:annotation-driven conversion-service="conversionService"/> <!--自定义类型转换器--> <bean id=...
  • SpringMVC数据类型转换超详细介绍,注解式控制器的数据验证、类型转换及格式化
  • 介绍 SpringMVC 自定义类型转换器。
  • 但是我们还会遇到一些SpringMVC没有帮我配置好的类型转换,例如:时间日期类型转换,字符串(非Json)和POJO之间的转换,这时我们就需要自定义一个类型转换器,来让SpringMVC能够帮我实现类型转换 SpringMVC具体帮...
  • SpringMVC自定义类型转换 方法:使用自定义类型转换器 步骤: 1.第一步:定义一个类,实现 Converter 接口,该接口有两个泛型。 import org.springframework.core.convert.converter.Converter; import java.text....
  • SpringMVC类型转换

    2019-11-21 22:21:20
    什么是类型转换? Spring MVC 中在控制器方法中 把 请求 中的 参数 映射为 指定类型,指定类型 可以是自己定义的类型,这就是Spring的类型转换类型转换的框架原理 术语定义: a. ServletRequest : 请求 b....
  • springMVC类型转换

    2019-03-10 17:16:15
    springmvc.xml中配置 编写自定义功能类 controller方法 jsp
  • 类型转换器,就是将请求参数中的字符串 转换成其他类型,进行方法参数的赋值 定义一个类型转换器,需要实现Converter接口,会有一个泛型( 即对数据类型的约束 ) ; SpringMVC拦截器
  •    在springmvc本身就提供了很多转换...自定义类型转换器的步骤: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>springmvc学习&
  • SpringMVC类型转换

    2019-07-01 10:57:02
    SpringMVC框架不仅提供了强大的类型转换和格式化机制,而且开发者还可以方便的开发出自己的类型转换器和格式化转换器,完成字符串和各种数据类型之间的转换。 String,double,int 都可以转String 以下代码为...
  • springMVC 类型转换

    2021-08-13 16:45:35
    springMVC 类型转换器 标量转换器  StringToBooleanConverter String→Boolean  ObjectToStringConverter Object→String  StringToNumberConverterFactory String→Number( Integer、 Long等)  ...
  • 当是非常规的数据类型,无法进行类型转换,会抛出异常 EditorController: editor.jsp: 自定义类型转换器: 定义转换器:DateConverter:转换日期格式 在配置文件中配置:1.2.3dispatcher.xml:
  • 第一步:定义一个类,实现 Converter 接口,该接口有两... * 用于把 String 类型转成日期类型 */ @Override public Date convert(String source) { DateFormat format = null; try { if(StringUtils.isEmpty(sou
  • 主要介绍了Springmvc自定义类型转换器实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • SpringMVC内部其实已经有了一些类型转换器,比如,我们前端发来了一个String类型的18.接收参数时我们使用int去接收,程序是不会报错的,其实这就是转换器的作用。虽然SpringMVC很好了,不过它也有迷茫的时候,比如,...
  • springmvc消息转换

    2022-05-10 21:48:09
    } /** * 配置消息转换器 */ @Override public void configureMessageConverters(List> converters) { converters.add(webMvcMessageConverter()); } } WebMvcMessageConverter: package ...
  • SpringMVC提供了强大的类型转换和格式化机制,开发者可以使用SpringMVC内置的类型转换和格式化机制,也可以开发出自己的类型转换器和格式化转换器,完成字符串和各种数据类型之间的转换SpringMVC框架的Converter&...
  • --注册类型转换器GoodsConverter --> <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <list> ...
  • SpringMVC消息转换

    2022-01-12 14:20:10
    SpringMVC消息转换器解决Long类型数据精度丢失问题
  • Springmvc类型转换

    千次阅读 2018-05-04 22:40:00
    Springmvc类型转换器一、概述在我们写的程序中,表单提交的无论是 int 还是 double 类型的请求参数,用于处理该请求的处理器方法的形参,均可直接接收到相应类型的相应数据,而非接收到 String 再手工转换。...
  • SpringMVC 默认已经提供了一些常用的类型转换器,例如客户端提交的字符串转换成int型进行参数设置。但是不是所有的数据类型都提供了转换器,没有提供的就需要自定义转换器, # 一、SpringMvc的请求-自定义类型转换...
  • 主要介绍了springmvc json类型转换错误解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,462
精华内容 18,584
关键字:

springmvc类型转换

spring 订阅