package com.lovecoding.springmvc;


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping(value = "/demoContorller")
public class DemoContorller {

    /**
     * RequestMapping 注解是一个功能强大的 URL映射匹配注解
     * 我们可以在 SpringMVC里面使用这个注解  对URL 进行匹配
     * 前端控制器 在匹配完成的时候， 会匹配参数 调用函数
     * 使用 {}  可以用来参数占位， 我们可以直接获取URL内的占位参数
     * 一般用来 处理 RestFull 风格的API接口参数  ##用的比较多##
     * @param username
     * @return
     */
    @RequestMapping(
            //匹配URL路径
            value = {  "/save/{id}" },
            //限制请求方法
            method = { RequestMethod.POST, RequestMethod.GET }
            //限制请求参数
            //params = {"username=zhangsan"},
            //限制 请求Header
            //headers = {"User-Agent"},
            //限制 请求内容
            //consumes = { "multipart/form-data" },
            //限制返回内容
            //produces = { "text/html" }
    )
    /**
     * RequestParam 有两个用户
     * 1 映射参数， 可以处理 入参和自定义变量 名称不符问题
     * 2 标注有些参数 是否是  必须传入的参数
     */
    public String demo( @RequestParam(value = "user", required = false) String username  ){
        System.out.println( "DemoContorller Run!!!" + username );
        return "/demo.jsp";
    }

    /**
     * 这种通过 URL 路径传递参数的风格
     * 一般叫做 RESTful 协议
     * @param studentId
     * @return
     */
    @RequestMapping(
            value = {"/updateStudent/{studentId}" }
    )
    public String hello( @PathVariable(
            value = "studentId",
            required = false
    ) int studentId ){

        System.out.println( "studentId :" + studentId );

        return "/demo.jsp";

    }

}
