※Java Bean
※public class Book { private int id; private String name; private ComicBook comicBook; // setter/getter... } ------------------------------ public class ComicBook { private String name; // setter/getter... }
※
※
@RequestMapping("book") public String pojo(Book book) { System.out.println(book.getId()); System.out.println(book.getName()); System.out.println(book.getComicBook().getName()); return "hello"; }
※傳到 controller 後,只要名稱符合 java bean 裡面的名字,就會抓的到
※
<a href="ooo/xxx/book.mvc?id=99&name=漫畫&comicBook.name=七龍珠">pojo</a>
※
※接受的參數
官方文件有說明,有一些上一篇也說過了,Servlet API
有 9 個:.ServletRequest
.ServletResponse
.HttpSession
.Principal
.Locale
.InputStream
.Reader
.OutputStream
.Writer
@RequestMapping("api") public String api( ServletRequest req, ServletResponse res, HttpSession session, Principal principal, Locale locale, InputStream is, // Reader reader, // OutputStream out, Writer writer) { System.out.println(req); System.out.println(res); System.out.println(session); System.out.println(principal); System.out.println(locale); System.out.println(is); // System.out.println(reader); // System.out.println(out); System.out.println(writer); return null; }
※注意 XXX has already been called for this response,IO 的 InputStream 和 Reader 只能選其中一個; OutputStream 和 Writer 也只能選其中一個
※在 controller 第一行下繼點後,下面第 2 個 Annotation
※第二個 for 迴圈裡 resolveHandlerArguments 會看到判斷 annotation 的程式碼
RequestParam
RequestHeader
RequestBody
CookieValue
PathVariable
ModelAttribute
Value
Valid 開頭的
所以在參數裡,可以用以上這幾個 annotation
再往下看有一個 if,裡面有個方法 resolveCommonArgument
進去後,再找到 resolveStandardArgument,按 Open Implementation 就能看到這 9 個判斷
※測試
<a href="ooo/xxx/api.mvc">servlet api</a>
※
※Model
@RequestMapping("model") public String model(Model model) { System.out.println(model.getClass().getName()); model.addAttribute("m", Stream.of("ddd", "eee", "fff").collect(Collectors.toList())); return "hello"; }
※
※測試
---------- index.jsp ---------- <a href="ooo/xxx/model.mvc">model</a> ---------- hello.jsp ---------- m:${requestScope.m}
※
※Map
@RequestMapping("map") public String map(Map<String, Object> map) { map.put("ooo", Stream.of("aaa", "bbb", "ccc").collect(Collectors.toList())); return "hello"; }
※
※測試
---------- index.jsp ---------- <a href="ooo/xxx/map.mvc">map</a> ---------- hello.jsp ---------- ooo:${requestScope.ooo}
※ModelMap 當然也可以,因為它是 Map 的子類
※從ExtendedModelMap 分開來的
※接受的返回值
官方文件
※ModelAndView
@RequestMapping("modelView") public ModelAndView mv() { ModelAndView mav = new ModelAndView(); // mav.setViewName("/WEB-INF/hello.jsp"); mav.setViewName("hello"); mav.addObject("xxx", "yeah"); return mav; }
※setViewName 的內容和 上一篇說的 InternalResourceViewResolver (Spring 設定檔裡) 有關
※也可使用建構子 new ModelAndView("hello");
※測試
---------- index.jsp ---------- <a href="ooo/xxx/modelView.mvc">modelAndView</a> ---------- hello.jsp ---------- xxx:${requestScope.xxx}
※
沒有留言:
張貼留言