SpringMVC注解简介

1. @RequestMapping

作用:建立请求URL和处理请求方法之间的对应关系。

通过注解的元注解我们可以看出来该注解可以作用在方法上,也可以作用在类(接口)上,两者区别在于请求URL结构的不同。
RequestMapping
注解的属性
1.path:表示请求的URL,作用同value属性
2.value:表示请求的URL,若只使用这一个属性,可以只写请求路径
3.method:表示请求的方法,Get/Post
4.params:表示请求时URL必须携带的参数,否则不执行
5.headers(不常用):用于指定限制请求消息头的条件
使用示例:

@Controller
@RequestMapping(path = "/student")
public class HelloController {
    
    
    @RequestMapping(path = "/hello")//当类上也使用了该注解时,只有收到student/hello/才会产生作用
    public String sayHello(){
    
    
        System.out.println("hello student");
        return "studentHello";
    }
}

2. @RequestParam

作用:把请求中的参数赋值给控制器中的形参

该注解只能作用在方法参数上
在这里插入图片描述
注解的常用属性
1.name:作用同value
2.value:和前端传过来的Key相同,然后把Value赋值给形参
使用示例:

@Controller
@RequestMapping("anno")
public class AnnoController {
    
    
    @RequestMapping("requestParam")
    public String getRequestParam(@RequestParam("userName") String name){
    
    
        System.out.println(name);
        return "getParams";
    }
}

3. @RequestBody

作用:用于获取请求体内容直接使用得到的是key=value&key=value…这样结构的数据,不适用于get请求

该注解只能作用在方法参数上
在这里插入图片描述
注解的常用属性:无
使用示例:

    @RequestMapping("/requestBody")
    public String getRequestBody(@RequestBody String body){
    
    
        System.out.println(body);
        return "getParams";
    }

可能会出现的问题:前端传过来的中文会乱码,网上的解决办法如下,但是我修改后没有起到作用,如果路过的大哥会解决办法,还请不吝赐教。
1.在被调用的方法上的RequestMapping上加上 “produces = “application/json; charset=utf-8”

    @RequestMapping(path = "/requestBody", produces = "application/json; charset=utf-8")
    public String getRequestBody(@RequestBody String body){
    
    
        System.out.println(body);
        return "getParams";
    }

2.在beans配置文件中加上如下代码

<mvc:annotation-driven conversion-service="ConversionServiceFactoryBean">
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes" value="text/plain;charset=UTF-8"/>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

4. @PathVariable

作用:用于绑定URL中的占位符,例如:请求url为 /user/{id},这个{id}就是占位符

该注解作用在方法参数上
在这里插入图片描述
注解的常见属性
1.name:作用同value
2.value:获取占位符的Key,把Value赋值给方法形参
使用示例:

    @RequestMapping("/PathVariable/{name}")
    public String getPathVariable(@PathVariable("name") String name){
    
    
        System.out.println(name);
        return "getParams";
    }

5. @ModeAttribute

作用:该注解可以作用在方法上和参数上。作用在方法上时,表示被注解的方法会先于这个controller中的所有方法执行之前执行;作用在参数上时,获取指定的数据,并赋值给形参。
ModeAttribute
作用在方法上的使用示例:
应用场景:前端提交数据时不完整,通过ModeAttribute注解的方法先讲数据补全(可能是从数据库中查询或者写一些业务代码产生新值),再把完整的数据传给前端请求的url。

    @RequestMapping("/modelAttribute")
    public String getModelAttribute(User user){
    
    
        System.out.println(user);
        return "getParams";
    }
    
    //该方法会限制性,自动补上当前时间后去请求前端真正要请求的url
    @ModelAttribute
    public User testModelAttribute(User user){
    
    
        System.out.println("ModelAttribute方法先执行");
        user.setuName(user.getuName());
        user.setAge(user.getAge());
        user.setBirthday(new Date());
        return user;
    }

作用在参数上的使用示例:

    @RequestMapping("/modelAttributeParam")
    public String getModelAttributeParam(@ModelAttribute User user){
    
    
        System.out.println(user);
        return "getParams";
    }

6. SessionAttributes

用于多次执行控制器方法参数间的共享
注解的属性:
1.value:用于指定存入的属性名称
2.type用于指定存入的数据类型
SessionAttributes

使用示例:

@Controller
@RequestMapping(path = "anno")
@SessionAttributes("msg")
public class AnnoController {
    
    
    @RequestMapping("/getSessionAttributes")
    public String getSessionAttributes(ModelMap modelMap){
    
    
        String msg = (String) modelMap.get("msg");
        System.out.println(msg);
        return "getParams";
    }
}

猜你喜欢

转载自blog.csdn.net/TreeCode/article/details/107889246