的我@ResponseBody有電腦板一個Spring MVC Web應用程序如下圖所示:攔截Spring MVC中
@Controller
public class ActionRestController {
@RequestMapping(value = "/list", method = GET)
@ResponseBody
public List<Action> list(Action action, SearhCriteria searchCriteria) {
List<Action> ret = new ArrayList<Action>();
// Call a service method to get the records
// Copy the records into the list
// return the list of objects
return ret;
}
當用戶執行搜索控制器被調用。應用中有幾個這樣的控制器,每個可搜索的實體一個。 由於我無法很好解釋的原因,在這裏,我無法修改這些控制器。
但是現在,我已經在UI中要求顯示搜索條件和否。的記錄和分頁細節。該信息不由控制器返回。 Controller返回的JSON只包含記錄列表。
我提出了一個不同的控制器將處理請求,獲取並提出了額外的信息模型,並轉發像下面的請求到現有的控制器:
@Controller
public class ActionExtendedController {
@RequestMapping(value = "/searchlist", method = GET)
@ResponseBody
public List<Action> list(Action action, SearhCriteria searchCriteria, Model model) {
model.addAttribute("searchParameters", searchCriteria);
return "forward:/list";
}
高達至此,所有的好。 我想要做的就是在控制器返回List的地方攔截請求,然後將其轉換爲JSON,並返回包含列表和搜索參數的地圖。
現在,由於'不可變'的控制器用戶ResponseBody控制轉到JacksonMessageConverter並且響應從那裏出去。我已經嘗試了以下路徑,但它們不起作用。
攔截 - 到時候我來到這裏,響應已經寫好了,所以也沒有辦法去改變它。
用於JasksonMessageConverter的自定義ObjectMapper - 不起作用,因爲我無法訪問映射器中的模型對象,所以我只能訪問控制器返回的列表。
方面@控制器的切入點 - 我認爲這種技術會工作,但我無法讓它工作。建議不會觸發,我相信我在配置中缺少一些東西。
有沒有辦法讓Spring AOP火上標註的控制器,處理方法或 任何人都可以提出攔截處理程序返回值(與模型一起)的另一種方法是什麼?
謝謝,我想我會選擇這個選項。我曾經簡單地思考過這個問題,但沒有去追求它,認爲直接調用控制器方法可能不是那麼好,設計明智。但現在我想到了,除了以下內容,我不能想到任何主要缺點 - 如果參數或基本控制器的路徑變量發生更改,並且它們作爲參數添加到處理程序方法中,調用處理程序還必須具有可用的數據 - 可能會或可能不會是好事。但爲了我的目的,它會起作用。 – Anupama