簡體   English   中英

Web服務使用Spring Boot支持RequestBody或RequestParam

[英]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)

參見: https : //stackoverflow.com/a/16942352/5585182

對於我來說,這似乎是最簡單的解決方案。

    @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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM