SpringBoot自定義對象參數(shù)實現(xiàn)自動類型轉換與格式化
序章
問題提出一:
當我們用表單獲取一個 Person 對象的所有屬性值時, SpringBoot 是否可以直接根據(jù)這些屬性值將其轉換為 Person 對象
回答:
當然可以,SpringBoot 通過自定義對象參數(shù),可以實現(xiàn)自動類型轉換與格式化,并可以級聯(lián)封裝(一個對象擁有另一個對象作為屬性時,也可以封裝)。
一、實體類 Bean
person類
注: 構造方法一定要寫全,無參數(shù)和有參數(shù)的都要寫,不然封裝過程會出問題
import org.springframework.context.annotation.Bean; import javax.xml.crypto.Data; public class Person { String userName; int age; Pet pet; public Person() { } public Person(String userName, int age, Pet pet) { this.userName = userName; this.age = age; this.pet = pet; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Pet getPet() { return pet; } public void setPet(Pet pet) { this.pet = pet; } }
pet類
package com.example.demo2.bean; public class Pet { String name; String age; public Pet() { } public Pet(String name, String age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
二、前端表單index.html
注意 input 的 name 屬性值要與類的屬性名一一對應
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>自定義參數(shù)綁定原理</title> </head> <body> <form action="/saveuser" method="post"> 姓名: <input name="userName" value="liuwanqing"/> <br/> 年齡: <input name="age" value="20"/> <br/> 寵物姓名:<input name="pet.name"/><br/> 寵物年齡:<input name="pet.age" /> <input type="submit" value="保存"> </form> </body> </html>
三、Controller 類
Post /saveuser 請求, 返回封裝好的 Person 類
package com.example.demo2.controller; import com.example.demo2.bean.Person; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class ParameterTestController { @PostMapping("/saveuser") public Person saveuser(Person person){ return person; } }
四、運行結果截圖
提出問題二: SpringBoot 之所以可以自動獲取表單值封裝為指定類型對象,是因為SpringBoot 具有嚴密的參數(shù)解析機制, 但是若我們的輸入值SpringBoot 不能解析時,難道我們就只能坐以待斃了嘛
回答: 不是,我們可以通過WebMvcConfigurer定制化SpringMVC的功能,通過重寫 addFormatters 方法自定義類型參數(shù)
示例
如下表單中的 “huahua,5個月” 字符串是不能被 SpringBoot 解析為 Pet 類型的
<form action="/saveuser" method="post"> 姓名: <input name="userName" value="liuwanqing"/> <br/> 年齡: <input name="age" value="20"/> <br/> 寵物:<input name="pet" value="huahua,5個月"/> <input type="submit" value="保存"> </form>
自定義類型參數(shù) 封裝POJO:
編寫WebConfig類實現(xiàn)WebMvcConfigurer類,重寫 addFormatters 方法
package com.example.demo2.config; import com.example.demo2.bean.Pet; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.convert.converter.Converter; import org.springframework.format.FormatterRegistry; import org.springframework.util.StringUtils; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer{ //1、WebMvcConfigurer定制化SpringMVC的功能 @Bean public WebMvcConfigurer webMvcConfigurer(){ return new WebMvcConfigurer() { @Override public void addFormatters(FormatterRegistry registry) { registry.addConverter(new Converter<String, Pet>() { @Override public Pet convert(String source) { if(!StringUtils.isEmpty(source)){ Pet pet = new Pet(); String[] split = source.split(","); pet.setName(split[0]); pet.setAge(split[1]); return pet; } return null; } }); } }; } }
到此這篇關于SpringBoot自定義對象參數(shù)實現(xiàn)自動類型轉換與格式化的文章就介紹到這了,更多相關SpringBoot自定義對象參數(shù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
ApiOperation和ApiParam注解依賴的安裝和使用以及注意事項說明
這篇文章主要介紹了ApiOperation和ApiParam注解依賴的安裝和使用以及注意事項說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09SpringMVC HttpMessageConverter報文信息轉換器
??HttpMessageConverter???,報文信息轉換器,將請求報文轉換為Java對象,或將Java對象轉換為響應報文。???HttpMessageConverter???提供了兩個注解和兩個類型:??@RequestBody,@ResponseBody???,??RequestEntity,ResponseEntity??2023-01-01Java源碼分析:Guava之不可變集合ImmutableMap的源碼分析
今天給大家?guī)淼氖顷P于Java源碼的相關知識,文章圍繞著Java ImmutableMap展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下,希望能給你帶來幫助2021-06-06SpringCloud使用CircuitBreaker實現(xiàn)熔斷器的詳細步驟
在微服務架構中,服務之間的依賴調用非常頻繁,當一個下游服務因高負載或故障導致響應變慢或不可用時,可能會引發(fā)上游服務的級聯(lián)故障,最終導致整個系統(tǒng)崩潰,熔斷器是解決這類問題的關鍵模式之一,Spring Cloud提供了對熔斷器的支持,本文將詳細介紹如何集成和使用它2025-02-02