我是靠谱客的博主 干净河马,最近开发中收集的这篇文章主要介绍Spring的类型转换1 类型转换说明2 WebMvcConfigurer配置类3 Converter4 自定义转换案例,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Spring的类型转换

  • 1 类型转换说明
  • 2 WebMvcConfigurer配置类
  • 3 Converter
  • 4 自定义转换案例
    • 1自定义实现Converter接口
    • 2 自定义实现WebMvcConfigurer接口
    • 3 实体类
    • 4 测试类

1 类型转换说明

前台传参到后台,后台会对参数进行转换,封装成实体类中类型的参数.(常见: 时间字符串2021年4月12日21:56:50转换为Date类型时间)

时间类型转换应用

2 WebMvcConfigurer配置类

package org.springframework.web.servlet.config.annotation;

public interface WebMvcConfigurer {
    	/**
	 * Add {@link Converter Converters} and {@link Formatter Formatters} in addition to the ones
	 * registered by default.
	 */
	default void addFormatters(FormatterRegistry registry) {
	}

	/**
	 * Add Spring MVC lifecycle interceptors for pre- and post-processing of
	 * controller method invocations and resource handler requests.
	 * Interceptors can be registered to apply to all requests or be limited
	 * to a subset of URL patterns.
	 */
	default void addInterceptors(InterceptorRegistry registry) {
	}
    
    ...
}

/* 代码说明
FormatterRegistry实现了Spring自带的默认注册器,我们使用只需要加一个Converter和Formatter后,然后注册到FormatterRegistry中.
*/

3 Converter

/**
 * A converter converts a source object of type {@code S} to a target of type {@code T}.
 *
 * <p>Implementations of this interface are thread-safe and can be shared.
 *
 * <p>Implementations may additionally implement {@link ConditionalConverter}.
 *
 * @author Keith Donald
 * @author Josh Cummings
 * @since 3.0
 * @param <S> the source type
 * @param <T> the target type
 */
@FunctionalInterface
public interface Converter<S, T> {

	/**
	 * Convert the source object of type {@code S} to target type {@code T}.
	 * @param source the source object to convert, which must be an instance of {@code S} (never {@code null})
	 * @return the converted object, which must be an instance of {@code T} (potentially {@code null})
	 * @throws IllegalArgumentException if the source cannot be converted to the desired target type
	 */
	@Nullable
	T convert(S source);
    
    default <U> Converter<S, U> andThen(Converter<? super T, ? extends U> after) {
		Assert.notNull(after, "After Converter must not be null");
		return (S s) -> {
			T initialResult = convert(s);
			return (initialResult != null ? after.convert(initialResult) : null);
		};
	}
}
/* 代码说明:
	首先可以看到类上的@FunctionalInterface,说明支持函数式接口,支持Lambda变成.
	其次,接口的作用,就是将一个参数类型转换成另一个参数类型.Converter<S, T>中S代表源对象,T表示目标对象.
	再则,类上描述,实现此接口的类是线程安全的并且可被共享使用,安全的原因是它作用于方法体内,每次都用都是实例化一次,所以它是线程安全的.
*/

4 自定义转换案例

1自定义实现Converter接口


public class MyConverter implements Converter<String, Date> {
 
@Override    
	public Date convert(String source) {        
		Date date = null;        
		try {if(source.indexOf("-")>0){                
			date = new SimpleDateFormat("yyyy-MM-dd").parse(source);            
				}        
			} catch (ParseException e) {
			e.printStackTrace();        
			}        
		return date;    
	} 
}

2 自定义实现WebMvcConfigurer接口

/**
 * 添加参数转换器
 */
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
 
    /**
     *
     * @param registry
     */
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new MyConverter());
    }
 
}

3 实体类

@Data
public class User {
 
    private String id;
 
    private Date birthday;
}

4 测试类

@RestController
@RequestMapping("/user")
public class UserController {
 
    @GetMapping("/queryUser")
    public void queryUser(User user) {
        // Xxx业务逻辑
        
        System.out.println("User = " + user);
    }
}

模拟请求:

http://localhost:8080/user/queryUser?id="001"&birthday="2021-04-12"

运行结果:

User(id=001, birthday=Mon Apr 12 00:00:00 CST 2021)

最后

以上就是干净河马为你收集整理的Spring的类型转换1 类型转换说明2 WebMvcConfigurer配置类3 Converter4 自定义转换案例的全部内容,希望文章能够帮你解决Spring的类型转换1 类型转换说明2 WebMvcConfigurer配置类3 Converter4 自定义转换案例所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部