admin管理员组文章数量:1538180
在Spring3中引入了一个Converter接口,它支持从一个Object转为另一个Object。除了Converter接口之外,实现ConverterFactory接口和GenericConverter接口也可以实现我们自己的类型转换逻辑。
Converter接口
首先看看Converter接口的定义
public interface Converter<S, T> {
T convert(S source);
}
可以看到这个接口是使用了泛型的,S表示原类型,T表示目标类型,然后里面定义了一个convert方法,将原类型对象作为参数传入进行转换之后返回目标类型对象。
下面在Spring Boot中使用Converter接口来实现将String类型分别转换为Data,自定义对象和List<自定义对象>。
添加依赖
添加spring-boot-starter-web
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
实体类
1.User类
public class User {
private long id;
//用户名
private String name;
//出生日期
private Date birth;
//关联用户
private User linkUser;
//喜欢的文章
private List<Article> favArticles=new ArrayList<>();
//下面省略Getter和Setter方法
2.Article类
public class Article {
//文章id
private long artId;
//文章名
private String artName;
//下面省略Getter和Setter方法
}
配置类型转化器
下面三个类都需要添加@Component
注解,否则不能生效。并实现Spring提供的org.springframework.core.convert.converter.Converter
接口,重写其中的convert()方法 ,方法中写自己的转换逻辑。
1.定义全局日期转换器
@Component
public class DateConvert implements Converter<String,Date> {
//日期格式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
@Override
public Date convert(String s) {
if (s!=null&&!"".equals(s)){
try {
//解析参数
Date date=sdf.parse(s);
return date;
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}
}
2.定义全局对象转换器
这里使用Jackson的ObjectMapper类的readValue()函数实现将Json字符串反序列化为Java对象
@Component
public class ObjectConvert implements Converter<String,User> {
@Override
public User convert(String s) {
ObjectMapper objectMapper=new ObjectMapper();
if (s!=null&&!"".equals(s)){
try {
User user=objectMapper.readValue(s,User.class);
return user;
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
return null;
}
}
3.定义全局List类型转换器
这里使用Jackson的ObjectMapper类的readValue()函数实现将Json字符串反序列化为 List
@Component
public class StringToListController implements Converter<String, List<Article>> {
ObjectMapper objectMapper=new ObjectMapper();
@Override
public List<Article> convert(String s) {
List<Article> list=null;
try {
list=objectMapper.readValue(s, new TypeReference<List<Article>>() {
});
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return list;
}
}
控制器
这里注意使用produces设置返回数据的类型为json,consumes设置提交内容的类型为:application/x-www-form-urlencoded
。
application/x-www-form-urlencoded
作用:将键值对的参数用&连接起来,如果有空格,将空格转换为+加号;有特殊符号,将特殊符号转换为ASCII HEX值。
@RestController
public class HelloController {
@GetMapping("hello")
public Date getDate(Date birth){
System.out.println(birth);
return birth;
}
@PostMapping(value="showUser",produces="application/json",
consumes = "application/x-www-form-urlencoded")
public User showUser(User user){
return user;
}
}
测试
在Postman中进行测试,注意以下设置:POST请求 -> Body -> x-www-form-urlencoded。在Body中输入参数进行测试。
因为参数中有Json类型参数,如果直接使用Params下进行发送数据,会出现请求参数异常错误。
测试结果:
版权声明:本文标题:Spring Boot中使用Convert接口实现类型转换器 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1726967787a1092416.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论