2017-10-08 25 views
0

我正在試着學習最新的Spring Boot,並正在處理form submission的一些文檔。我正在看看他們用於GET的控制器的代碼,它提供了包含表單的視圖,並且還處理從POST中捕獲信息。爲什麼GET端點需要Spring Boot中的參數

package hello; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.GetMapping; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.PostMapping; 

@Controller 
public class GreetingController { 

    @GetMapping("/greeting") 
    public String greetingForm(Model model) { // where does 'model' come from? 
     model.addAttribute("greeting", new Greeting()); 
     return "greeting"; 
    } 

    @PostMapping("/greeting") 
    public String greetingSubmit(@ModelAttribute Greeting greeting) { 
     return "result"; 
    } 

} 

我不明白的是greetingForm(Model model)方法如何獲取參數? GET請求肯定不會在請求中發送整個模型,只是URI,對吧?此外,他們沒有列出Model類的代碼,所以我無法檢查。

這是他們的解釋:

的greetingForm()方法使用一個模型對象以露出新的問候語 到視圖模板。以下代碼 中的Greeting對象包含與問候視圖中的 表單域對應的ID和內容等字段,並將用於從表單中捕獲 信息。

我也不明白如何返回字符串「問候」翻譯成一個視圖正在服務。是否有另一個實際調用此方法的圖層?

我來自Play!框架背景,我已經習慣了我的控制器端點必須初始化並將整個模板發送迴響應 - 所以這很混亂。

+1

實際上,您可以檢查所有代碼,只需在控制器中放置一個斷點,然後逐步查看所有[堆棧跟蹤](https://i.stack.imgur.com/ACf26.png)。會給你更多的信息 – varren

回答

1

Spring自己做了很多工作來確定向控制器處理程序方法注入什麼以及如何處理返回值。

Spring docs

這一註解處理方法可以有非常靈活的簽名。支持的方法參數和返回值的具體細節取決於支持的特定@Controller模型。 Spring Web MVC和Spring WebFlux都支持這個註釋,但有一些不同之處。更多細節可以在Spring框架參考中找到。

Spring分析方法的參數。 Model是Spring可以理解的類型,所以它在被調用時被注入到方法中。

處理程序方法也可以有多種返回類型。當返回類型爲String時,Spring明白這是指要渲染並返回給客戶端的視圖的名稱。這也是Model進來的地方;您在渲染過程中將放入Model實例的值綁定到視圖。

+0

好的,謝謝。有很多假設正在進行,這很有道理。 – NateH06

相關問題