我是靠谱客的博主 干净河马,最近开发中收集的这篇文章主要介绍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 自定义转换案例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复