javascript
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接口实现类型转换器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xctf攻防世界Leaking wp
- 下一篇: DAC0832转换器