在SpringMVC中设置自定义类型转换器Converter

前言

  • 在SpringMVC中为我们提供了许多内置的类型转换器,当我们在HTML表单中发起一个请求时,Spring会根据表单项中name属性的值映射到POJO的属性名,调用相对性属性的set方法帮我们把表单中的多个属性转化为一个POJO对象,这样我们在Controller方法中就可以直接使用POJO作为参数得到提交的数据。
  • 但有时候会存在其他情况,比如你把一个POJO对象的多个属性都写在一个input标签中,在这种情况下Spring无法自动帮我转化为POJO对象,这种情况下我们可以通过设置自定义类型转化器,按照我们的规则去转化成POJO对象。

代码

  • 首先,写一个类并实现Converter<S, T>接口,在这个接口中有一个方法T convert(S var1),在该方法中设置类型转化规则。其中,S是传入的类型,T放回的类型。
    public interface Converter<S, T> { @Nullable T convert(S var1); }

Dome如下

public class BookConverter implements Converter<String, Book> {
    @Override
    public Book convert(String s) {
        String[] split = s.split("-");
        Book book = null;
        if (split.length==2){
            book = new Book();
            book.setBname(split[0]);
            book.setPrice(new BigDecimal(split[1]));
        }
        return book;
    }
}

Book类为

public class Book {

    private String bname;
    private BigDecimal price;
    //省略get和set方法
  • 然后在SpringMVC的配置文件中配置ConversionServiceFactoryBean
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters" >
            <set>
            	//这里可以有多个自定义的类型转化器
                <bean class="这里是上面实现Converter接口的全名类" />
            </set>
        </property>
    </bean>
    <mvc:annotation-driven conversion-service="conversionService"/>

在input标签中输入

JAVA从入门到入土-9999

Spring会根据我们自定义的规则转化为所需要的类型,在Controller方法中便可以直接使用对应的类型作为参数接收传给后端的参数

public String testConverter(@RequestParam("book") Book book){

如果在项目中使用了@NumberFormat或@DateTimeFormat注解,则需要使用FormattingConversionServiceFactoryBean对象工厂,在FormattingConversionServiceFactoryBean中已经注册了NumberFormatAnnotationFormatterFactroy和JodaDateTimeFormatAnnotationFormatterFactroy,支持使用@NumberFormat、@DateTimeFormat对接对数字类型和日期类型的格式化

<bean class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring MVC,您可以使用自定义类型转换器来处理特定类型之间的转换。要设置定义类型转换器,您需要执行以下步骤: 1. 创建一个实现了 `Converter<S, T>` 接口的自定义类型转换器类。其,S 是源类型,T 是目标类型。该接口要求实现 `convert()` 方法,用于执行实际的类型转换逻辑。 ```java public class CustomConverter implements Converter<String, Date> { @Override public Date convert(String source) { // 实现自定义类型转换逻辑 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { return dateFormat.parse(source); } catch (ParseException e) { throw new IllegalArgumentException("Invalid date format"); } } } ``` 2. 在Spring MVC配置注册自定义类型转换器。可以通过编程方式或者使用XML配置进行注册。 a. 编程方式: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addFormatters(FormatterRegistry registry) { registry.addConverter(new CustomConverter()); } } ``` b. XML配置方式: ```xml <mvc:annotation-driven conversion-service="conversionService" /> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="com.example.CustomConverter" /> </set> </property> </bean> ``` 3. 在您的控制器方法使用目标类型作为参数。Spring MVC会自动调用适当的类型转换器将请求参数转换为目标类型。 ```java @Controller public class MyController { @RequestMapping("/example") public String handleRequest(@RequestParam("date") Date date) { // 处理转换后的日期对象 return "example"; } } ``` 通过以上步骤,您就可以设置定义类型转换器来处理Spring MVC类型转换。希望对您有所帮助!如果还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值