14 个 Spring MVC 顶级技巧( 三 )


http:// localhost:8080 / spring / login?username = scott&password = tiger
类型转换也是自动完成的 。例如,如果您声明integer 如下类型的参数 :
@RequestParam int securityNumber然后,Spring将在处理程序方法中自动将请求参数(字符串)的值转换为指定的类型(整数) 。如果参数名称与变量名称不同,则可以如下指定参数的实际名称:
@RequestParam("SSN") int securityNumber该@RequestParam 注解也有两个额外的属性,这可能是在某些情况下是有用的 。该属性指定参数是否为必需 。例如:required
@RequestParam(required = false) String country这意味着该参数 country 是可选的;因此,它可能会从请求中丢失 。在上面的示例中,country 如果请求中不存在此类参数,则变量 将为null 。
另一个属性是 defaultValue,可以在请求参数为空时用作后备值 。例如:
@RequestParam(defaultValue = "18") int ageMap 如果方法参数是type,Spring还允许我们将所有参数作为对象 访问 Map<String, String> 。例如:
doLogin(@RequestParam Map<String, String> params)然后,映射参数包含键-值对形式的所有请求参数 。有关使用@RequestParam 注释的更多信息,请参见 @RequestParam注解 。更多:SpringBoot聚合
7.返回模型和视图处理完业务逻辑后,处理程序方法应返回一个视图,然后由Spring的调度程序servlet对其进行解析 。Spring允许我们ModelAndView 从handler 方法中返回String或 对象。
在以下示例中,该 handler 方法返回一个String并表示一个名为的视图 LoginForm:
@RequestMapping(value = "/login", method = RequestMethod.GET)public String viewLogin() {    return "LoginForm";}这是返回视图名称的最简单方法 。但是,如果要将其他数据发送到视图,则必须返回一个 ModelAndView 对象 。考虑以下处理程序方法:
@RequestMapping("/listUsers")public ModelAndView listUsers() {    List<User> listUser = new ArrayList<>();    // 从DAO获取用户列表…    ModelAndView modelView = new ModelAndView("UserList");    modelView.addObject("listUser", listUser);    return modelView;}如您所见,此处理程序方法返回一个 ModelAndView 保存视图名称 UserList 的User 对象和一个可在视图中使用的对象集合。
Spring也非常灵活,因为您可以将ModelAndView 对象声明 为处理程序方法的参数,而不用创建一个新的对象 。因此,以上示例可以重写如下:
@RequestMapping("/listUsers")public ModelAndView listUsers(ModelAndView modelView) {    List<User> listUser = new ArrayList<>();    //从DAO获取用户列表…    modelView.setViewName("UserList");    modelView.addObject("listUser", listUser);    return modelView;}了解有关该类的更多信息,请参见:ModelAndView class 。
8.将对象放入模型在遵循MVC架构的应用程序中,控制器(C)应该将数据传递到模型(M)中,然后在视图(V)中使用该模型 。正如我们在前面的示例中看到的那样,该类的addObject() 方法 ModelAndView是以名称-值对的形式将对象放入模型中:
modelView.addObject("listUser", listUser);modelView.addObject("siteName", new String("CodeJava.net"));modelView.addObject("users", 1200000);同样,Spring非常灵活 。你可以Map 在处理程序方法中声明类型的参数。Spring使用此映射存储模型的对象 。让我们看另一个例子:
@RequestMapping(method = RequestMethod.GET)public String viewStats(Map<String, Object> model) {    model.put("siteName", "CodeJava.net");    model.put("pageviews", 320000);    return "Stats";}这比使用ModelAndView 对象还要简单。根据你的喜好,可以使用Map 或 使用 ModelAndView 对象 。在这里要感谢Spring的灵活性 。
9.处理程序方法中的重定向如果你希望在满足条件的情况下将用户重定向到另一个URL,请redirect:/ 在URL之前追加 。以下代码段给出了一个示例:


推荐阅读