2017-08-30 141 views
2

我有一個帶有平靜端點/小部件/ {id}的web應用程序。使用SPEL使用spring mvc填充DTO

此端點接受更新dto並呼叫服務層進行更新。

我目前從json主體中提取更新的數據。然而,該服務需要比json主體包含的更多數據,例如當前用戶和來自url的id。

目前我的控制器方法看起來像

@RequestMapping(value = "/{id}", method = RequestMethod.PUT) 
public WidgetResponseDto update(@RequestBody WidgetUpdateDto widgetUpdate, 
            @PathVariable("id") Long id, 
            @CurrentOrganisationId Long organisationId) 

和控制器的第一份工作是將這些數據Munge時間到一個單一的對象。然後在應用程序中重複這種模式。

我的問題是:我如何從路徑中取一個參數,或者說SecurityContext並直接在我的dto中使用它。

理想情況下,我希望能夠在業務對象中使用SPEL來填充這些字段,並使用Jackson來填充其他字段。

開箱即用嗎?如果不是我最好寫一個自定義的httpMessageConverter?

回答

0

您可以通過@RequestHeader註解訪問請求頭:

RequestMapping(value = "/{id}", method = RequestMethod.PUT) 
public WidgetResponseDto update(@RequestBody WidgetUpdateDto widgetUpdate, 
           @PathVariable("id") Long id, 
           @CurrentOrganisationId Long organisationId, 
           @RequestHeader("Host") String host, 
           @RequestHeader(""Keep-Alive"") String keepAlive) 

請求頭「主機」和「保持活動」將分別可通過hostkeepAlive變量。 請參閱API瞭解更多詳情

+0

謝謝,但這沒有幫助。我希望能夠將路徑變量直接注入到我的WidgetUpdateDto中,而不是控制器方法。 –

+0

你能展示方法身體嗎?或者,你注入請求參數的方式inWidgetUpdateDto if else? – Anclav

+0

目前,我創建了一個新的對象,其中包含來自dto的字段以及請求參數值,並且orgId作爲第一種認爲該方法所做的工作將其轉換爲單個對象。 例如,新的WidgetUpdate(widgetUpdate.name,widgetUpdate.type,id,organisaitonId) 。 或者,我可以在Dto上使用setter來達到同樣的目的。 –