日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot中使用Convert接口实现类型转换器

發布時間:2024/3/7 javascript 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot中使用Convert接口实现类型转换器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在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 {//文章idprivate 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");@Overridepublic 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> {@Overridepublic 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();@Overridepublic 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接口实现类型转换器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。