[英]Webservice supporting RequestBody or RequestParam using spring boot
我們的大多數過濾操作都是通過@RequestBody完成的,這很不錯,因為它會自動將帖子中發送的所有字段映射到我們選擇的對象。 我們有要求允許在URL中僅獲取和傳遞參數的請求。 支持這些人以我們想要的方式進行了一場戰斗,但最終我們進行了更改。 唯一的問題是,它使它變得笨拙(至少對於我的實現而言是如此)。我正在尋找一些建議,以使其更簡潔,更省力。
之前:
@RequestMapping(path = "forecast/filter", method = RequestMethod.POST)
List<FinancialContractData> forcastFilter(
@RequestBody(required = false) FinancialContractData filter) {
filter = filter ?: new FinancialContractData()
List<PortfolioContractInvoiceBook> curBooks = getPortContrInvBooks(filter)
后:
@RequestMapping(path = "forecast/filter", method = [RequestMethod.POST, RequestMethod.GET])
List<FinancialContractData> forcastFilter(
@RequestParam(value = "startDt", required = false) Date startDt,
@RequestParam(value = "contractId", required = false) Integer contractId,
@RequestParam(value = "differencesOnly", required = false) boolean differencesOnly,
@RequestBody(required = false) FinancialContractData filter) {
filter = filter ?: new FinancialContractData()
filter.startDt = startDt ? new RBSDate(startDt.time).asCalendar(): filter.startDt
filter.startDt = filter.startDt ?: defaultDate
filter.contractId = contractId ?: filter.contractId
filter.differencesOnly = differencesOnly ?: filter.differencesOnly
List<PortfolioContractInvoiceBook> curBooks = getPortContrInvBooks(filter)
這個特定的SAP組僅需要按對象上的三個屬性進行過濾(還有很多其他屬性)。 我喜歡將所有參數通常映射到對象的屬性。 我傾向於對控制器的建議,以便我們所有的方法都可以免費獲得。 我沒有想到春天還有其他隱藏的寶石嗎?
如果模型具有正確的設置方法和獲取方法,則可以傳遞模型:
forcastFilter(MyRequestModel model)
對於我來說,這似乎是最簡單的解決方案。
@RequestMapping(path = "forecast/filter", method = [RequestMethod.POST, RequestMethod.GET])
List<FinancialContractData> forcastFilter(
@RequestBody(required = false) FinancialContractData filter, FinancialContractData paramFilter) {
filter = filter ?: paramFilter
List<PortfolioContractInvoiceBook> curBooks = getPortContrInvBooks(filter)
它仍然需要指定兩個參數並選擇一個要使用的參數(我對POST主體進行優先級排序),但是它非常干凈並且不會因合並數據而混亂。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.