SpringMVC的部分注解

@Controller
标识Spring MVC Controller处理器,用来创建处理HTTP请求的对象;
@RequestMapping
@RequestMapping相关参数
1.value:指定url请求的实际地址,是@RequestMapping的默认值
@RequestMapping(“hello”)等同于 @RequestMapping(value=“hello”)
2.method:指定请求的method类型:GET、POST、PUT、DELETE
@RequestMapping(value=“hello”,method=RequestMethod.GET)表示只能接收get请求
RequestMethod是一个枚举类

@RequestMapping(value = "/hello", method=RequestMethod.GET)
public String hello(){

    System.out.println("执行了hello方法");
    return "index";
}

3.params:表示请求中必须包含某些参数,否则无法调用该方法
@RequestMapping(value=“hello”,method=RequestMethod.GET,params={“name”,”id”})表示只能接收get请求且必须传递name和id这两个参数
@RequestMapping(value=“hello”,method=RequestMethod.GET,params={“name”,”id=10”})表示只能接收get请求,且必须传递name和id这两个参数,且id的值必须为10

@RequestMapping(value = "/hello", method=RequestMethod.GET,params = {"name","id=10"})
public String hello(String name,String id){
    System.out.println(name);
    System.out.println(id);
    System.out.println("执行了hello方法");
    return "index";
}

关于参数绑定:在形参列表中,通过添加@RequestParam注解完成了HTTP请求参数与业务方法形参的映射

@RequestMapping(value = "/hello", method=RequestMethod.GET,params = {"name","id=10"})
public String hello(@RequestParam("name") String str, @RequestParam("id")int age){
    System.out.println(str);
    System.out.println(age);
    System.out.println("执行了hello方法");
    return "index";
}

上面代码表示将请求的参数name和id分别赋给了形参str和age,同时自动完成了数据类型转换,将“10”转为了int类型的10,再赋给age,这些工作都是由HandlerAdapter来完成的;

@CookieValue:映射cookie
SpringMVC通过映射可以直接在业务方法中获取cookie的值

@RequestMapping("cookie")
public  String cookie(@CookieValue(value = "JSESSIONID") String seesionID){
    System.out.println(seesionID);
    return "index";
    
}

将客户端cookie中的JSESSIONID的值赋值给形参sessionID

使用javaBean绑定参数
SpringMVC会根据请求参数名和javaBean属性名进行自动匹配,自动为对象填充属性值,同时支持级联属性。(级联属性指对象之中有对象)
实体类:

import lombok.Data;
@Data
public class Address {
    String value;
}
import lombok.Data;
@Data
public class User {
    int id;
    String name;
    Address address;
}

handler:

@RequestMapping("/save")
public String arrayTest(User user){
    System.out.println(user);
    return  "index";
}

index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="/save" method="post">
        用户id:<input type="text" name="id"/><br>
        用户名:<input type="text" name="name"/><br>
        用户地址:<input type="text" name="address.value"/><br>
        <input type="submit" value="注册">
    </form>
</body>
</html>

jsp中的name=“id”,name=“name”,name="address.value"就会自动对应handler里面的User对向往的id、name、address.value;

如果出现中文乱码问题,只需在web.xml中添加Spring MVC自带的过滤器即可
过滤器:

<filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>/*编码使用UTF-8*/
  </init-param>
</filter>
<filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <url-pattern>/*</url-pattern>/*拦截*/
</filter-mapping>

@ResponseBody
表示Spring MVC 会直接将业务方法的返回值响应给客户端,如果不加@ResposeBody注解,Spring MVC会将业务方法的返回值传递给哦DispatcherServlet,再由DispatcherServlet调用ViewResolver对返回值进行解析,映射到一个JSP资源;


@RequestMapping("/data")
@ResponseBody
public  String data(int id){
    return id+"";
    
}

请求地址为:http://localhost:8080/hello/index?id=1,但是如果不给id传值,会报错,因为不传值时,id为null,但基本数据类型不能为null,所以报错,为解决此问题,使用包装类;

上面一段代码,如果地址栏输入请求地址为http://localhost:8080/hello/index?id=10,则就会在页面上显示10;如果将@ResponseBody去掉,若没有10.jsp这个页面,则会报错;

@RequestParam
value=”num”:将HTTP请求中名为num的参数赋给形参id
required:设置num是否为必填项,true表示必填,false表示非必填,可省略
DefaultValue=“10”:如果HTTP请求中没有怒骂参数,默认值为10

@RequestMapping("/data")
public  String hh(@RequestParam(value = "num" ,required = false,defaultValue = "10") Integer id){
    return "index";

}

@RestController
表示该控制器会直接将业务方法的返回值响应给客户端,不进行视图解析;
@Controller:表示该控制器的每一个返回值都会交给视图解析器进行解析,如果只需要将数据响应给客户端,而不需要进行视图解析,则需要在对应的业务方法定义处添加@ResponseBody

@Controller
public class handler {

    @RequestMapping("/data")
    @ResponseBody
    public  String data(int id){
        return id+"";

    }
}

等同于:

@RestController
public class handler {
    @RequestMapping("/data")
       public  String data(int id){
        return id+"";
    }
 }

视图解析器配置:

 <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章