@PostMapping
public String processSubmit(@ModelAttribute("pet") Pet pet, Model model, BindingResult result) { ... }
下面是正确的,这个要放在pet后面
@PostMapping
public String processSubmit(@ModelAttribute("pet") Pet pet, BindingResult result, Model model) { ... }
@RequestParam
@Controller
@RequestMapping("/pets")
@SessionAttributes("pet")
public class EditPetForm {
// ...
@GetMapping
public String setupForm(@RequestParam("petId") int petId, ModelMap model) {
Pet pet = this.clinic.loadPet(petId);
model.addAttribute("pet", pet);
return "petForm";
}
// ...
}
@RequestMapping("/events")
public ResponseBodyEmitter handle() {
ResponseBodyEmitter emitter = new ResponseBodyEmitter();
// Save the emitter somewhere..
return emitter;
}
// In some other thread
emitter.send("Hello once");
// and again later on
emitter.send("Hello again");
// and done at some point
emitter.complete();
Implementing Controllers
spring配置
Spring4.3开始支持
URI Template Patterns
Consumable Media Types
Producible Media Types
Request Parameters and Header Values
Matrix Variables
spring配置如下:
BindingResult
使用demo:
下面是错误的做法
@PostMapping public String processSubmit(@ModelAttribute("pet") Pet pet, Model model, BindingResult result) { ... }
下面是正确的,这个要放在pet后面
@RequestParam
@RequestBody
HTTP request body
其他
@ResponseBody
@ModelAttribute
REST Controllers
HttpEntity
Asynchronous Request Processing 异步的请求处理
Spring MVC 3.2引入了基于Servlet 3异步请求处理。像往常一样,返回一个值,而是一个控制器方法可以返回一个java . util . concurrent。可生产从Spring MVC托管线程的返回值。同时主Servlet容器线程退出和释放,允许处理其他请求。Spring MVC调用调用在一个单独的线程的帮助下TaskExecutor调用返回时,请求被分配回Servlet容器的简历处理使用由可调用的返回值。这里是这样的控制器方法的一个例子: web.xml要加上
<async-supported>true</async-supported>
HTTP Streaming
控制器方法可以使用DeferredResult和Callable 生成它的返回值,可用于实现技术,如长轮询服务器可以推动事件尽快给客户端。 如果你想把多个事件在一个HTTP响应?这是一个技术与“长轮询”,被称为“HTTP流”。Spring MVC使之成为可能通过ResponseBodyEmitter返回值类型可以用来发送多个对象,而不是一个通常是@ResponseBody一样,其中每个对象发送写入响应HttpMessageConverter。
HTTP Streaming With Server-Sent Events
SseEmitterResponseBodyEmitter的子类提供支持服务器发送的事件。服务器发送的事件只是一个变化在同一“HTTP流”技术除了格式化事件从服务器推出根据W3C规范服务器发送的事件。 服务器发送的事件可以用于自己的目的,这是推动事件从服务器转移到客户机。很容易在Spring MVC和SseEmitter需要简单地返回一个值的类型。 注意但是,ie浏览器不支持服务器发送的事件,为更先进的web应用程序消息传递场景如网络游戏、合作金融applicatinos,其他人最好考虑Spring的WebSocket支持,包括SockJS-style WebSocket模拟回落到一个非常广泛的浏览器(包括Internet Explorer)和更高级别的消息传递模式也与客户进行交互通过发布-订阅模型在一个更messaging-centric架构。为进一步在这看到下面的博客背景。
HTTP Streaming Directly To The OutputStream
ResponseBodyEmitter允许发送事件通过HttpMessageConverter通过编写对象的响应。这可能是最常见的情况下,例如当编写JSON数据。然而有时是有用的绕过消息转换和直接写响应OutputStream例如一个文件下载。这样做可以的帮助下StreamingResponseBody返回值类型。
配置异步请求
web.xml
@initbinder
在BaseController里实现 @InitBinder