================== Spring MVC异步请求 ================== 通过AJAX提交的请求为异步请求。 同步请求仅用于单体项目,所有前后端分离项目都采用异步请求。 1 流响应 /src/main/java/cn/tedu/springmvc/controllers/BookController.java: @Controller @RequestMapping("/BookController") public class BookController { ... @RequestMapping("/addBookByUrl") public void addBookByUrl(@RequestParam("name") String name, @RequestParam("author") String author, @RequestParam("price") double price, HttpServletResponse response) throws IOException { System.out.println("控制器> 添加一本图书"); System.out.println("控制器> 书名:" + name); System.out.println("控制器> 作者:" + author); System.out.println("控制器> 价格:" + price); response.setCharacterEncoding("utf-8"); response.setContentType("application/json"); PrintWriter writer = response.getWriter(); writer.println(new ObjectMapper().writeValueAsString( new Book(0, name, author, price))); writer.flush(); writer.close(); } ... @RequestMapping("/addBookByHeader") public void addBookByHeader(@RequestHeader("name") String name, @RequestHeader("author") String author, @RequestHeader("price") double price, HttpServletResponse response) throws IOException { name = decode(name); author = decode(author); System.out.println("控制器> 添加一本图书"); System.out.println("控制器> 书名:" + name); System.out.println("控制器> 作者:" + author); System.out.println("控制器> 价格:" + price); response.setCharacterEncoding("utf-8"); response.setContentType("application/json"); PrintWriter writer = response.getWriter(); writer.println(new ObjectMapper().writeValueAsString( new Book(0, name, author, price))); writer.flush(); writer.close(); } ... @RequestMapping("/addBookByBody") public void addBookByBody(@RequestBody Book book, HttpServletResponse response) throws IOException { System.out.println("控制器> 添加一本图书"); System.out.println("控制器> 书名:" + book.getName()); System.out.println("控制器> 作者:" + book.getAuthor()); System.out.println("控制器> 价格:" + book.getPrice()); response.setCharacterEncoding("utf-8"); response.setContentType("application/json"); PrintWriter writer = response.getWriter(); writer.println(new ObjectMapper().writeValueAsString(book)); writer.flush(); writer.close(); } ... } 例程:SpringMVC 2 响应对象 /src/main/java/cn/tedu/springmvc/controllers/BookController.java: @Controller @RequestMapping("/BookController") public class BookController { ... @RequestMapping("/addBookByUrl") @ResponseBody public Book addBookByUrl(@RequestParam("name") String name, @RequestParam("author") String author, @RequestParam("price") double price) { System.out.println("控制器> 添加一本图书"); System.out.println("控制器> 书名:" + name); System.out.println("控制器> 作者:" + author); System.out.println("控制器> 价格:" + price); return new Book(0, name, author, price); } ... @RequestMapping("/addBookByHeader") @ResponseBody public Book addBookByHeader(@RequestHeader("name") String name, @RequestHeader("author") String author, @RequestHeader("price") double price) { name = decode(name); author = decode(author); System.out.println("控制器> 添加一本图书"); System.out.println("控制器> 书名:" + name); System.out.println("控制器> 作者:" + author); System.out.println("控制器> 价格:" + price); return new Book(0, name, author, price); } ... @RequestMapping("/addBookByBody") @ResponseBody public Book addBookByBody(@RequestBody Book book) { System.out.println("控制器> 添加一本图书"); System.out.println("控制器> 书名:" + book.getName()); System.out.println("控制器> 作者:" + book.getAuthor()); System.out.println("控制器> 价格:" + book.getPrice()); return book; } ... } 通过ResponseBody注解将控制方法返回的对象,转换成Json字符串,交给前端页面中的Ajax。 例程:SpringMVC 如果一个控制器类中的所有方法都以返回对象的方式响应来自前端页面Ajax的异步请求,则可以将ResponseBody注解加到控制器类上。