一、springquerymap用法
@RequestMapping("/example") public String example(@SpringQueryMap ExampleDto exampleDto) { // some code }
@SpringQueryMap註解用於將GET請求的查詢參數映射到一個DTO中。它可以將查詢參數映射到一個簡單的POJO對象或者Map中。在使用時,Spring會將所有查詢參數收集到一個Map中,然後使用Spring Converter將其轉換成請求方法的參數類型。
使用@SpringQueryMap十分方便,我們在DTO中定義參數,用註解@SerializedName維護json參數名字映射即可。@SpringQueryMap也支持參數嵌套,這意味着DTO參數可以很靈活的定義,不同於其他的請求解析的註解,可以更好的滿足我們的需求。
@SpringQueryMap註解被Spring掃描後,Spring將會在請求參數中自動搜索與DTO參數名相同的查詢參數,Spring嘗試將查詢參數儘可能的轉換為與Controller方法參數類型相同的變量,這些類型的變量可以是基本的類型,如int、boolean,也可以是Java中的其他複雜類型,如BigDecimal、Date等。
二、springquerymap繼承問題
public class BaseDto { private long id; // 省略getter和setter } public class ExampleDto extends BaseDto { private String name; private int age; // 省略getter和setter }
@SpringQueryMap也支持繼承關係,如果我們的參數定義中使用了繼承,則後代DTO的參數也會被解析。這意味着我們只需要在前代DTO中定義一次參數,那麼可以在後代DTO參數中繼承。當然適用於@SpringQueryMap註解轉換後的基本類型。它將會尋找和POJO面板中屬性名相同的URL參數。
三、springquerymap註解
@SpringQueryMap註解用於將查詢參數映射到controller或處理器方法的DTO、JavaBean或Map參數中。它可以解析URL參數並將其映射到JavaBean中的屬性,也可以將查詢參數映射到Map。如果使用Map作為目標參數,則查詢參數和映射將直接轉換為字符串和字符串之間的映射。
與其他的請求解析註解相比較,@SpringQueryMap註解是相當的靈活,我們可以不關心都傳了哪些參數。
四、springquerymap替代
public String example(@RequestParam Map params) { String sort = (String)params.get("sort"); String order = (String)params.get("order"); // some code }
如果我們不使用@SpringQueryMap註解,我們只能使用@RequestParam來聲明一個Map類型的參數,
然後從map中獲取所需的參數,這樣做的確簡單直觀,不過需要手動處理查詢參數,為了確保數據的格式正確,並保留合理的代碼結構,@SpringQueryMap註解顯示了更好的實現,值得我們使用。
五、springquerymap註解傳遞時間格式
public class ExampleDto { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date startTime; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date endTime; // 省略getter和setter }
@DateTimeFormat註解指定了Date類型在解析時的時間格式,也可以指定其他更方便的方式。
如果你想要使用其他時間格式,或者不是使用的Date類型的DTO,可以使用其他的解析框架,如Gson,@QueryParameter等。
六、springquerymap下劃線
如果查詢參數包含下劃線,則可以通過使用下面的方式來進行映射。
public class ExampleDto { @SerializedName("page_number") private int pageNumber; @SerializedName("page_size") private int pageSize; // 省略getter和setter }
其中@SerializedName註解使我們可以使用特殊的名稱來標識當前屬性,它解析了URL參數並映射到JavaBean的屬性上,也可以將查詢參數映射到Map。
七、springquerymap嵌套map
public class ExampleDto { private String name; private Map properties; // 省略getter和setter }
@SpringQueryMap註解可以解析嵌套的Map參數,可以映射到Map上,也可以映射到Bean上,而@Bean上的Map屬性必須是Map類型的。
在處理封裝Bean時,我們也可以通過@Value註解和表達式解析來獲取值。這些值將映射到表達式的目標對象上並轉換為Spring支持的類型。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/246938.html