[英]Conditional @RequestBody in Spring MVC
我有一個普通的Spring MVC控制器,它返回模型和視圖。 這很好。 但是現在我們正在轉向純REST架構,其中服務器僅通過JSON進行通信。
我沒有重做一切,而是嘗試盡可能地重用現有的控制器,這就是我能夠做到的
我可以通過包含ContentNegotiatingViewResolver將GET請求重用到相同的控制器。 因此,現在同一控制器可以返回一個jsp和一個基於accept標頭轉換為json的模型。
現在另一部分是POST請求,我需要一些幫助。
要綁定一個json請求,我將不得不在現有的控制器上使用@RequestBody,但是我想有條件地像使用GET請求一樣使用它。 因此,如果accept報頭是json,則應使用該消息轉換器綁定模型,否則請使用常規的html表單綁定。
這樣做之后,如何為我的場景處理BindingResult對象?
總結一下,這是我的問題:
查看@RequestMapping
屬性的consumes
和produces
屬性。 您可能具有相同方法的兩個版本,具有不同的consume
s,其中一個可以使用@RequestBody
而另一個不能。
對不起,您真的無法幫助您解決問題的第二部分。
要處理POST請求,您將需要具有自定義的AbstractHttpMessageConverter
和ModelAttributeMethodProcessor
。 如果控制器正在使用請求參數( @RequestParam
),則需要MessageConverter來處理確實使用請求主體的控制器( @RequestBody
),並需要ModelAttributeMethodProcessor來處理驗證。
顯然,您將需要檢查標題或其他方式進行默認綁定。
我回答了另一個有關驗證不可變對象的問題,但適用相同的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.