SpringMVC的常用注解(三)上

简介: SpringMVC的常用注解(三)

一. SpringMVC的常用注解


SpringMVC 可以利用XML 的方式进行开发,但为了开发的方便,一般都会采用注解的形式进行开发。 所以,SpringMVC中提供了很多的注解,下面讲解一下注解。


二. @Controller 注解


@Target({java.lang.annotation.ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller
{
  String value() default "";
}


以前为了实现handler 控制器,需要继承相应的父类或者是实现相应的接口,如Controller 接口, 而用@Controller 标记的类不需要再继承父类和实现接口,非常方便。 而且,如果是实现Controller 接口的话,则只能处理单一的请求, 而@Controller 类则可以处理多个请求,即写多个方法。 不要忘记进行包扫描。


二.一 @Controller 标记


@Controller
public class UserAction {
}


二.二 包扫描


在springmvc.xml 中:


<context:component-scan base-package="com.yjl.action"></context:component-scan>


三. @RequestMapping 注解


@RequestMapping 用哪一个类和方法来处理请求动作。 可以标记在方法上,也可以标记在类上。 如果标记在类上,那么均以该路径作为父级路径。


@Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping
{
  String name() default "";
  @AliasFor("path")
  String[] value() default {};
  @AliasFor("value")
  String[] path() default {};
  RequestMethod[] method() default {};
  String[] params() default {};
  String[] headers() default {};
  String[] consumes() default {};
  String[] produces() default {};
}


@RequestMapping 注解中的 属性有:


1 . value     指定请求的实际地址

2 . method     指定请求的method 类型, 有Get,Post

3 . name    指定请求的别名。

4 . consumes    指定处理请求的提交内容类型,即 Content_type, 常见的有 application/json (json数据), text/html (普通字符串)

5 . produces    指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回

6 . params: 指定request中必须包含某些参数值是,才让该方法处理。

7 . headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。


其中,还有一个 path 属性,不常用。


三.一 value 属性。


用value 来指定实际地址。


1 . 配置在方法上


@RequestMapping(value="/register")
public String register(){
  return "user/login";
}


那么访问时,就可以 用 http://localhost:8090/SpringMVC02/register.action 进行访问了。


如果@RequestMapping 中只有一个属性值,那么可以省略 value属性。


@RequestMapping("/register")
public String register(){
  return "user/login";
}


一个类中有多个方法, 如list, add, 等方法,而且这些方法基本上都是会重复的, 如UserAction 中是 list(), add(),delete(),update() 方法, DeptAction 中也是 list(), add(), delete(), update() 方法,当然,可以在方法上进行区分

UserAction 中:


@RequestMapping(value="/user/list")
  public String list(){
    return "user/list";
  }


DeptAction 中:


@RequestMapping(value="/dept/list")
  public String list(){
    return "dept/list";
  }


2 . 配置在类上


每一个可能会重复的方法,前面都要加个自己类的标记,这样不太好。 故可以将@RequestMapping 注解放置在 类上。


UserAction 中:


@Controller
@RequestMapping(value="/user")
public class UserAction {
}


DeptAction 中:


@Controller
@RequestMapping(value="/dept")
public class DeptAction {
}


这样 list() 方法配置时,就不需要再添加前面的自己类的标记了。


UserAction:


@RequestMapping(value="/list")
  public String list(){
    return "user/list";
  }


访问时路径为: http://localhost:8090/SpringMVC02/user/list.action


DeptAction 中:


@RequestMapping(value="/list")
  public String list(){
    return "dept/list";
  }


访问时路径为: http://localhost:8090/SpringMVC02/dept/list.action


三.二 method 属性


1 . 配置一个方式


@RequestMapping(value="/login",method=RequestMethod.POST)
  public String login(){
    return "user/login";
  }


指定 请求的方式为 POST 提交 ,如果在前面 form 表单设置提交的方式为 get的话,是不能提交到这个方法的。 注意,此时请求路径 value 是不能省略的。


20190729195840695.png


2 . 也可以配置多个请求方式


@RequestMapping(value="/login",method={RequestMethod.GET,RequestMethod.POST})
  public String login(){
    return "user/login";
  }


form 表单,get 方式和post 方式均可以的。


3 .RequestMethod 提供的方式有八种。


package org.springframework.web.bind.annotation;
public enum RequestMethod
{
  GET,  HEAD,  POST,  PUT,  PATCH,  DELETE,  OPTIONS,  TRACE;
  private RequestMethod() {}
}


如果没有指定,那么可以任意的方式进行。 通常设置成 get 或者是Post.


三.三 consumes 属性


  1. 可以配置一个 如常见的json 方式


@RequestMapping(value="/login",method={RequestMethod.GET,RequestMethod.POST},
      consumes="application/json")
  public String login(){
    return "user/login";
  }


2 . 也可以配置多种方式,如 json 和普通字符串


@RequestMapping(value="/login",method={RequestMethod.GET,RequestMethod.POST},
      consumes={"application/json","text/html"})
  public String login(){
    return "user/login";
  }


三.四 produces 属性


指定返回类型为json 时


@RequestMapping(value="/login",method={RequestMethod.GET,RequestMethod.POST},
      produces={"application/json"})
  public String login(){
    return "user/login";
  }


也可以配置多个


@RequestMapping(value="/login",method={RequestMethod.GET,RequestMethod.POST},
      produces={"application/json","text/html"})
  public String login(){
    return "user/login";
  }


三.五 params 属性


@RequestMapping(value="/login",params="isEffective=true")
  public String login(){
    return "user/login";
  }


请求的参数里面,必须具有 isEffective 的参数,并且值是true.


只有账号有效时,才能登录。 用于登录前的验证。


里面常常设置一些参数来限制方法的执行。


三.六 headers 属性


@RequestMapping(value="/login",params="isEffective=true",
      headers="Referer=http://www.yuejl.top")
  public String login(){
    return "user/login";
  }


浏览器的头部,必须带有Referer 的参数,并且值是 http://www.yuejl.top


这个常常用于防止 盗链的情况的产生。

相关文章
|
18天前
|
前端开发 Java Spring
Spring MVC 是如何对对象参数进行校验的
【6月更文挑战第4天】对象参数校验是使用 SpringMVC 时常用的功能,这篇文章尝试分析了,Spring 是如何实现这一功能的。
29 5
|
19天前
|
Web App开发 前端开发 Java
基于Spring3 MVC实现基于HTML form表单文件上传
基于Spring3 MVC实现基于HTML form表单文件上传
23 7
基于Spring3 MVC实现基于HTML form表单文件上传
|
2天前
|
安全 前端开发 Java
挑战5分钟内基于Springboot+SpringMVC+Mybatis-plus快速构建web后端三层架构
挑战5分钟内基于Springboot+SpringMVC+Mybatis-plus快速构建web后端三层架构
8 1
|
5天前
|
设计模式 前端开发 Java
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
11 1
|
5天前
|
前端开发 Dubbo Java
spring面试题_spring mvc面试题_springboot面试题库
spring面试题_spring mvc面试题_springboot面试题库
|
7天前
|
JSON 前端开发 Java
【JavaEE进阶】 关于Spring MVC 响应
【JavaEE进阶】 关于Spring MVC 响应
14 3
|
8天前
|
缓存 NoSQL Java
在 SSM 架构(Spring + SpringMVC + MyBatis)中,可以通过 Spring 的注解式缓存来实现 Redis 缓存功能
【6月更文挑战第18天】在SSM(Spring+SpringMVC+MyBatis)中集成Redis缓存,涉及以下步骤:添加Spring Boot的`spring-boot-starter-data-redis`依赖;配置Redis连接池(如JedisPoolConfig)和连接工厂;在Service层使用`@Cacheable`注解标记缓存方法,指定缓存名和键生成策略;最后,在主配置类启用缓存注解。通过这些步骤,可以利用Spring的注解实现Redis缓存。
26 2
|
19天前
|
前端开发 IDE Java
Spring3 MVC 集成Velocity中文支持
Spring3 MVC 集成Velocity中文支持
35 7
|
19天前
|
前端开发 Java BI
Spring3 Web MVC 集成Jasper Report生成PDF例子
Spring3 Web MVC 集成Jasper Report生成PDF例子
30 7
|
16天前
|
JSON 前端开发 Java
Spring MVC 级联对象参数校验
【6月更文挑战第6天】在 Spring MVC 的使用过程中,我们会发现很多非常符合直觉的功能特性,但往往我们会习惯这种「被照顾得很好」的开发方式,依靠直觉去判断很多功能特性的用法。
18 1