首页 > 其他分享 >springMVC常用注解介绍

springMVC常用注解介绍

时间:2023-01-06 09:55:05浏览次数:479  
标签:常用 RequestMapping springMVC 参数 user test 注解 public String

  • @Controller

     注解一个类表示控制器,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View,Spring MVC会自动扫描标注了这个注解的类

@Controller
class Demo{...}

 

  • @RequestMapping

     请求路径映射,有六个属性,下面我们把她分成三类进行说明,满足请求条件才执行方法

·value, method;

        value:     指定请求的实际地址,指定的地址可以是URI Template 模式

             用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径  http://localhost:8080/项目名/hello/方法的mapping

             用于方法上,表示响应请求方法的路径映射  http://localhost:8080/项目名/方法的mapping

@Controller
@RequestMapping(value = "/hello")  // @RequestMapping("/hello")
class Demo{}

        method:  指定请求的method类型, GET、POST、PUT、DELETE等

@RequestMapping("/hello" , method=RequestMethod.GET) //指定请求方式

·consumes,produces;

        consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html

@RequestMapping(value="/test",consumes="application/json")

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

@RequestMapping(value="/test",produces="application/json")    //同时暗示了返回的内容类型为application/json

·params,headers;

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

@RequestMapping(value="/test",params="name=tom")

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

@RequestMapping(value="/test",headers="Referer=http://www.clockin.com/")

 

  • @RequestParam

     放在参数前面,只能接收参数 a=b 格式的数据,即Content-Type 为 application/x-www-form-urlencoded类型的内容

      此时必须输入 localhost:8080/login?id=?  带参数才会调用该方法

 

public String login(@RequestParam int id){}
public String login(@RequestParam("list") List<String> list){}
public String login(@RequestParam("list")) String[] list){} 

      当设置 @RequestParam(required=false) 里面的required为false,此时如果不传参数的话,会报错;(默认为true 代表必须带参数) ,就可以不带参数

      当设置 @RequestParam(defaultValue="0") ,这样在地址里面也可以不带参数,如果带了参数会接收,不带参数会默认为0

      当设置 @RequestParam(value="sid")  int id ,sid会代替id,id赋值给sid,URL为 sid = ?  人话:括号里是传入的key

  • @RequestBody

     常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml

@requestMapping("/login")
public void login(@requestBody String userName,@requestBody User user){ 对象
    System.out.println(userName+" :"+user);
}

       

{"userName":"admin","pwd","admin123"}

     将JSON字符串中的两个变量的值分别赋予User类中的:String userName , User user 属性

     就将上述参数可以改为 @requestBody User user  这种形式会将JSON字符串中的值赋予user中对应的属性上(jackson解析)

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.4</version>
</dependency>

     需要注意的是,JSON字符串中的key必须对应user中的属性名

  • @ResponseBody

     此方法返回的数据放在request body里面,而不是跳转页面,通常用来返回JSON数据或者是XML

     在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据

@RequestMapping("/login")
@ResponseBody
public User login(User user){
      return user;
}

     User的属性: userName,pwd

     前台接收到的数据: '{"userName":"xxx","pwd":"xxx"}'

  • @RestController

       @RestController = @Controller + @ResponseBody  返回参数都在request body中,return ""无法返回指定页面

  • @PathVariable

     用于绑定restful路径上的变量,映射 URL 绑定的占位符

     将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中

@RequestMapping("/test/{id}")
public String test(@PathVariable("id") String id){
    System.out.println("test:"+id);
    return null;
}

 

  • @RequestHeader

     放在方法参数前,可以把Request请求header部分的值绑定到方法的参数上

复制代码
1 Host                    localhost:8080  
2 Accept                  text/html,application/xhtml+xml,application/xml;q=0.9  
3 Accept-Language         fr,en-gb;q=0.7,en;q=0.3  
4 Accept-Encoding         gzip,deflate  
5 Accept-Charset          ISO-8859-1,utf-8;q=0.7,*;q=0.7  
6 Keep-Alive              300
复制代码
@RequestMapping(“/header”)  
public void header(@RequestHeader(“Accept-Encoding”) String encoding,@RequestHeader(“Keep-Alive”) long keepAlive)  {  
  
}  

     request header部分的 Accept-Encoding的值,绑定到参数encoding上, Keep-Alive header的值绑定到参数keepAlive上

  • @CookieValue

    放在方法参数前,把Request header中关于cookie的值绑定到方法的参数上

JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84
@RequestMapping(“/cookie”)  
public void cookie(@CookieValue(“JSESSIONID”) String cookie)  {  
  
}  

    JSESSIONID的值绑定到参数cookie上

  • @ModelAttribute

    可标记在参数前

       当 hello1 重定向到 hello2 时,hello2 的@ModelAttribute("...") 会根据"..."找到重定向中对应的键赋值给参数temp上

复制代码
@RequestMapping("hello1")
public String test(RedirectAttributes ra) {
    ra.addFlashAttribute("temps", "abcdef");
    return "redirect:/hello2"; 
}
    
@RequestMapping("helle2")
public String test1(RedirectAttributes ra,@ModelAttribute("temps") String temp) {
        System.out.println(temp);
        return null;
}
复制代码

 

    可标记在方法前

      标有该注解的方法,会在目标方法前执行,用来封装请求参数,告诉Spring MVC 封装时不会再new User

      Map 和 Model 同是:BindingAwareModelMap 对象,数据都保存在该对象中,既是“隐含模型”

复制代码
@ModelAttribute
public void work(Map<String,Object> map) {      //在功能test方法前执行
    User user = new User(1,"tom",20); //模拟从数据库查询出的数据
    map.put("user", user);                //map保存对象数据
}


@RequestMapping("/test")
public String test(@ModelAttribute("user") User user) {
    System.out.println(user.toString());
    return null;
}
复制代码

      

      标有该注解的方法,可以直接在前端页面使用这个list对象

      隐含模型是幽灵,无处不在

复制代码
/**
*   jsp使用JSTL, ${list} 得到集合
*/
@ModelAttribute("list")  
public List<String> hobbiesList(){  
    List<String> hobbise = new LinkedList<String>();  
    hobbise.add("basketball");  
    hobbise.add("football");  
    hobbise.add("tennis");  
    return hobbise;  
} 
复制代码

 

  • @SessionAttribute

      只能作用在类上,将Model中的属性同步到session当中

复制代码
@Controller
@SessionAttributes("name")
public class SessionController {
    @RequestMapping("/hello")
    public String test(Model model){
        model.addAttribute("name", "tom");
        return null;
}
复制代码

      上面的代码将Model中的name参数保存到了session中(如果Model中没有name参数,而session中存在一个name参数,那么SessionAttribute会讲这个参数塞进Model中)

      SessionAttribute有两个参数:

        String[] value:要保存到session中的参数名称

        Class[] typtes:要保存的参数的类型,和value中顺序要对应上

      所以可以这样写:@SessionAttributes(types = {User.class,Dept.class},value={“attr1”,”attr2”})

      如果想删除session中共享的参数,可以通过SessionStatus.setComplete(),这句只会删除通过@SessionAttribute保存到session中的参数

复制代码
@RequestMapping("/hello")
  public ModelAndView test(SessionStatus status) {
  ModelAndView model = new ModelAndView("success.jsp");
  status.setComplete();
  return model;
}
复制代码

 

标签:常用,RequestMapping,springMVC,参数,user,test,注解,public,String
From: https://www.cnblogs.com/mihutao/p/17029524.html

相关文章

  • Docker常用命令
    Docker的常用命令帮助命令dockerversion #显示docker的版本信息dockerinfo   #显示docker的系统信息,包括镜像和容器的数量docker --help #万能命令帮助......
  • 注解@ConfigurationProperties使用方法
    1、配置文件内容spring.datasource.url=jdbc:mysql://localhost:3306/satellite_resource?characterEncoding=utf8&serverTimezone=Asia/Shanghaispring.datasource.use......
  • 对一些常用RDD算子的总结
    虽然目前逐渐sql化,但是掌握RDD常用算子是做好Spark应用开发的基础,而数据转换类算子则是基础中的基础,因此学习这些算子还是很有必要的。这篇博客主要参考Spark官方文档......
  • git常用命令
    git常用命令1.初始化一个本地仓库gitinit2.查看状态gitstatusgitlog3.加到暂缓区gitadd.(当前文件夹所有改动会被添加)4.提交gitcommit-m"xxxxx"......
  • SpringBoot整合Caffeine(通过注解)
    一、了解缓存配置先来了解一下配置方法吧,SimpleCacheManager和CaffeineCacheManager配置的区别:SimpleCacheManager: 这种缓存管理器允许你在应用程序启动时通过配置......
  • 8.注解开发
    对于简单的数据库操作可以使用注解开发,对于复杂的数据库操作不推荐使用!!mybatis的常用注解:@Insert:新增@Update:更新@Delete:删除@Select:查询@Result:实现结果集封......
  • JQuery:常用方法一览
    代码CodehighlightingproducedbyActiproCodeHighlighter(freeware)http://www.CodeHighlighter.com/-->Attribute:$(”p”).addClass(css中定义的样式类型);给某个元......
  • Kubernetes(k8s) kubectl completion常用命令
    kubectl在$HOME/.kube目录中查找一个名为config的配置文件。可以通过设置KUBECONFIG环境变量或设置--kubeconfig参数来指定其它kubeconfig文件。本文主要介绍K......
  • 关于爬虫中几个常用库的使用方法总结
    关于爬虫中几个常用库的使用方法总结学了半个多月的爬虫了,用这个案例总结一下各个爬虫库的用法。当然后面还有更重要和更好用的方法,再等后面学到,再做总结了。1.目标......
  • SpringMVC实现浏览器端大文件分片上传
    ​ 最近遇见一个需要上传超大大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。在某些业务中,大文件上传是一个比较重要的......