SpringMVC中的Controller方法的(返回值/参数类型)

2021-05-12 05:27

阅读:685

标签:bsp   lap   获取   address   none   逻辑   factory   cti   字符   

一. Controller方法的返回值:

1、 返回的ModelAndView

   ModelAndView 存放数据, addObject(),往model(request域)添加数据

   ModelAndView 添加逻辑视图名, setViewName(), 经过视图解析器,得到物理视图, 转发到物理视图

@RequestMapping("/getUser.action")
    public ModelAndView  getUser(@RequestParam(name="userId",required = true)Integer id) throws Exception{
        System.out.println("id="+id);
        ModelAndView modelAndView = new ModelAndView();
        User user = userService.queryOne(id);
        modelAndView.addObject("user", user);
        modelAndView.setViewName("userinfo");
        return modelAndView;
    }

2、 String类型,  返回的视图

  a. 逻辑视图名,  经过视图解析器,得到物理视图, 转发

@RequestMapping("/index.action")
    public String  toIndex() {
    return "index";    

  b. redirect:资源路径,  不经过视图解析器,要求这个资源路径写完整的路径: /开头,  表示/项目名    重定向到资源

@RequestMapping("/index.action")
public String  toIndex() {
    //重定向到index.jsp,  完整的路径
    return "redirect:/jsp/index.jsp";

  c. forward:资源路径, 不经过视图解析器,要求这个资源路径写完整的路径: /开头,表示/项目名    转发向到资源

@RequestMapping("/index.action")
public String  toIndex() {
    return "redirect:/user/getUser.action?userId=2";

  d.响应给前端的字符串,(数据),需要结合@ResponseBody

。。。

3、Java对象

  需要结合@ResponseBody, 发生的数据,(json)

。。。

4、 void, 默认逻辑视图名

   controller的@RequestMapping() 前缀+ 方法名,    很少使用

二. Controller方法的参数类型

1、直接注入Servlet API相关的类

  • 1) HttpServletRequest 通过request对象获取请求信息
  • 2) HttpServletResponse 通过response处理响应信息
  • 3) HttpSession 通过session对象得到session中存放的对象
//使用Servlet API 对象
    @RequestMapping("/fun2.action")
    public  String  fun2(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        System.out.println("fun2().....");
        request.setAttribute("hello", "request_hello");
        session.setAttribute("hello", "session_hello");
        Cookie cookie = new  Cookie("haha","xixi");
        //把cookie保存客户端
        response.addCookie(cookie);
        return "hello";
    }

2、 Model/ModelMap    往model存放/取数据,  request域

  如果我们只是往request域存放数据, 推荐使用Model, Controller类与ServletAPI 解耦

//推荐写法
    @RequestMapping("/fun3.action")
    public  String  fun3(Model model) {
        System.out.println("fun3().....");
        // SpringMVC 框架帮我们把model中的数据, 一个一个添加到request域
        // Model 不能替换Request对象, 
        model.addAttribute("hello","model_hello");
        model.addAttribute("xx", 123);
        return "hello";
    }

3、 接收请求参数

  a、基本数据类型

参数名与请求参数名一样,自动进行映射

如果参数名与请求参数名不一样, 使用@RequestParam 来进行映射

  b、参数是java对象,是一个pojo对象

案例添加用户:Pojo对象的属性名与请求参数的name一样, 自动映射

@RequestMapping(value="/addUser.action",method=RequestMethod.POST)
    public  String  addUser(User user,Model model) {
        userService.saveUser(user);
        model.addAttribute("msg", "添加成功");
        return "msg";
    }

前端页面:

技术图片技术图片
body>
    h1>添加用户:h1>
    form action="${pageContext.request.contextPath }/user/addUser.action" method="post">
        用户名:input type="text" name="username" />
        hr />   码:input type="text" name="password" />
        hr />   别:input type="radio" name="sex" value="男" id="man"
            checked />label for="man">label> input type="radio" name="sex"
            value="女" id="woman" />label for="woman">label>
        hr />   日:input type="text" name="brithday"  readonly id="brithday"/>
        hr />   址:input type="text" name="address" />
        hr />
        button>添加button>
    form>
body>
View Code

String类型,SpringMVC 不能自动转换为Date类型 ,  需要手动配置

1、局部的转换器, @DateTimeFormat(日期格式)

  只对某一个属性进行转换 ,只需要在日期类型的属性上添加

@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date brithday;

2、 全局的转换器,   对整个项目的所有的date类型进行转换

第一步: 编写一个转换器类, 实现Converter接口

public class MyDateConverter  implements Converter{
    private SimpleDateFormat  sdf = new SimpleDateFormat("yyyy-MM-dd");
    //转换的方法
    @Override
    public Date convert(String source) {
        try {
            return sdf.parse(source);
        } catch (ParseException e) {
            e.printStackTrace();
            throw new RuntimeException("日期格式不对,日期格式:yyyy-MM-dd");
        }
    }
}

第二步: 在springmvc的配置文件进行配置


    class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        class="spring09.converter.MyDateConverter"/>
                
            

对整个项目的Date类型进行转换

  c、参数是集合属性

Controller参数写法:  需要封装成一个类, 作为这个类的属性

//批量添加    @RequestMapping(value="/bathAddUser.action",method=RequestMethod.POST)
    public  String  bathAddUser(UserVo userVo,Model model) {
        model.addAttribute("msg", "添加成功");
        return "msg";
    }

UserVo类:

public class UserVo {
    private List users = new ArrayList();
    public List getUsers() {
        return users;
    }
    public void setUsers(List users) {
        this.users = users;
    }

前端页面:name="users[0].password"

UserVo中的users属性,list数组,里面的对象下标从0开始,可以使用js赋值,以下页面作为显示效果

技术图片技术图片
h1>批量添加用户:h1>
    form action="${pageContext.request.contextPath }/user/bathAddUser.action" method="post">
        h1>第一个用户:h1>
        用户名:input type="text" name="users[0].username" />
        hr />   码:input type="text" name="users[0].password" />
        hr />   别:input type="radio" name="users[0].sex" value="男" id="man"
            checked />label for="man">label> input type="radio" name="users[0].sex"
            value="女" id="woman" />label for="woman">label>
        hr />   日:input type="text" name="users[0].brithday"  readonly class="brithday"/>
        hr />   址:input type="text" name="users[0].address" />
        hr />
        
        h1>第二个用户:h1>
        用户名:input type="text" name="users[1].username" />
        hr />   码:input type="text" name="users[1].password" />
        hr />   别:input type="radio" name="users[1].sex" value="男" id="man"
            checked />label for="man">label> input type="radio" name="users[1].sex"
            value="女" id="woman" />label for="woman">label>
        hr />   日:input type="text" name="users[1].brithday"  readonly class="brithday"/>
        hr />   址:input type="text" name="users[1].address" />
        hr />
        
        button>添加button>
View Code

 

SpringMVC中的Controller方法的(返回值/参数类型)

标签:bsp   lap   获取   address   none   逻辑   factory   cti   字符   

原文地址:https://www.cnblogs.com/64Byte/p/13143944.html


评论


亲,登录后才可以留言!