簡體   English   中英

Spring MVC中的條件@RequestBody

[英]Conditional @RequestBody in Spring MVC

我有一個普通的Spring MVC控制器,它返回模型和視圖。 這很好。 但是現在我們正在轉向純REST架構,其中服務器僅通過JSON進行通信。

我沒有重做一切,而是嘗試盡可能地重用現有的控制器,這就是我能夠做到的

我可以通過包含ContentNegotiatingViewResolverGET請求重用到相同的控制器。 因此,現在同一控制器可以返回一個jsp和一個基於accept標頭轉換為json的模型。

現在另一部分是POST請求,我需要一些幫助。

要綁定一個json請求,我將不得不在現有的控制器上使用@RequestBody,但是我想有條件地像使用GET請求一樣使用它。 因此,如果accept報頭是json,則應使用該消息轉換器綁定模型,否則請使用常規的html表單綁定。

這樣做之后,如何為我的場景處理BindingResult對象?

總結一下,這是我的問題:

  1. 我們能否基於Accept標頭有條件地使用@RequestBody
  2. 是否有任何配置可以自動將您的Form綁定錯誤對象(在Spring MVC控制器內部)轉換為基於Accept標頭的json響應。

查看@RequestMapping屬性的consumesproduces屬性。 您可能具有相同方法的兩個版本,具有不同的consume s,其中一個可以使用@RequestBody而另一個不能。

對不起,您真的無法幫助您解決問題的第二部分。

要處理POST請求,您將需要具有自定義的AbstractHttpMessageConverterModelAttributeMethodProcessor 如果控制器正在使用請求參數( @RequestParam ),則需要MessageConverter來處理確實使用請求主體的控制器( @RequestBody ),並需要ModelAttributeMethodProcessor來處理驗證。

顯然,您將需要檢查標題或其他方式進行默認綁定。

我回答了另一個有關驗證不可變對象的問題,但適用相同的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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