我正在尝试学习最新的Spring Boot,并正在阅读有关处理form submission的一些文档。我看一下他们用于GET的控制器的代码,该控制器提供包含表单的视图,并且还处理从POST捕获信息。
folders:
- map: C:\Users\mattr\Projects\home_lara
to: /home/vagrant/code
我不明白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";
}
}
方法如何获取参数? GET请求肯定不会在其请求中发送整个Model,只是URI,对吧?此外,他们没有列出Model类代码的内容,因此我无法对其进行检查。
这是他们的解释:
greetingForm()方法使用Model对象公开新的Greeting 到视图模板。以下代码中的Greeting对象 包含与表单对应的id和内容等字段 问候视图中的字段,将用于捕获 来自表格的信息。
我也不明白如何只返回字符串"问候"转换为正在服务的视图。是否有另一层实际调用此方法?
我来自Play!框架背景,我习惯了我的控制器端点必须初始化并将整个模板与响应一起发回 - 所以这很令人困惑。
答案 0 :(得分:1)
Spring在它自己做了很多工作来确定注入控制器处理程序方法的内容以及如何处理返回值。
来自Spring docs:
使用此注释注释的处理程序方法可以具有非常灵活的签名。支持的方法参数和返回值的确切细节取决于支持的特定@Controller模型。 Spring Web MVC和Spring WebFlux都支持这种注释,但存在一些差异。 Spring Framework参考中提供了更多详细信息。
Spring分析了该方法的参数。 Model
是Spring理解的类型,因此在调用时会将其注入到方法中。
处理程序方法也可以有多种返回类型。当返回类型为String
时,Spring理解为表示要呈现并返回到客户端的视图的名称。这也是Model
进来的地方;放入Model
实例的值在渲染过程中绑定到视图。