Spring MVC中的常用注解及其用法

这篇具有很好参考价值的文章主要介绍了Spring MVC中的常用注解及其用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、建立连接

@RequestMappering可以作用在类上(类注解)、也可以作用在方法上(方法注解)。
@RequestMappering后面的括号中:双引号的值会赋值给value这个属性。只有一个属性且属性名为value时这个属性名可以省略不写。
@RequestMappering默认支持get/post请求,可以使用method属性来限制请求方式。

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

二、接收请求

2.1请求中带有一个参数

@RequestMapping("/r1")
public String r1(String name){
    return "接收到参数 name:"+name;
}
@RequestMapping("/r2")
public String r2(Integer age){
    return "接收到参数 age:"+age;
}

2.2请求中带有多个参数

@RequestMapping("/r3")    
public String r3(String name,Integer age){//注意参数类型要写Integer不要写int,因为请求中没有传参数时则传的参数是null,int类型的变量不能接收null
    return "name:"+name+",age:"+age;    
}

2.3用对象接收请求中的参数

public class UserInfo {//假设代码中定义了UserInfo类
    private int id;    
    private String name;    
    private Integer age;       
    public UserInfo() {    
    }    
    public UserInfo(int id, String name, Integer age) {        
        this.id = id;       
        this.name = name;       
        this.age = age;  
    }   
    public int getId() {        
        return id;    
    }   
   ...
}
@RequestMapping("/r4")    
public String r4(UserInfo user){        
    return user.toString();    
}

2.4对请求中的参数进行重命名

从请求中获取name参数的值并赋值给代码中的username参数。@RequestParam注解里加required = false则表示这个注解修饰的参数可以不传(否则这个注解修饰的参数一定要传),不传时这个参数的值为null。required默认为true。

@RequestMapping("/r5")    
public String r5(@RequestParam(value = "name",required = false) String username, @RequestParam("age") Integer userage){        
    return "username:"+username+",age:"+userage;    
}

2.5请求参数中带有数组

@RequestMapping("/r6")    
public String r6(String[] arr){        
    return Arrays.toString(arr)+",length:"+arr.length;    
}

2.6请求参数中带有集合

默认情况下,请求中参数名相同的多个值,是封装到数组中的。如果要封装到集合,要使⽤@RequestParam绑定参数关系。
以下为绑定参数关系的同时对参数中的集合名进行重命名:

  @RequestMapping("/r7")
    public String r7(@RequestParam(value = "list", required = false) List<String> list1){
        if (list1!=null){
            return list1.toString()+",size:"+list1.size();
        }
        return "list为空";
    }

2.7json字符串和Java对象互转

以下这种转换方式:拿到json字符串把这个json字符串转换为java对象的时候,会调用java对象无参的构造函数构造成一个空的对象,再对字符串进行解析对空对象的属性进行赋值。所以java对象所属的类中如果我们自己写了有参的构造方法则要把无参的构造方法加上。

public static void main(String[] args) throws JsonProcessingException {        ObjectMapper objectMapper = new ObjectMapper();        
    UserInfo userInfo = new UserInfo();          
    userInfo.setName("lingliang");          
    userInfo.setAge(16);        
    userInfo.setId(1);       
    //对象转json        
    String s = objectMapper.writeValueAsString(userInfo);          
    System.out.println(s);          
    //json字符串转成Java对象      
    UserInfo userInfo1 = objectMapper.readValue(s, UserInfo.class);  
    System.out.println(userInfo1);    
}

2.8前端传递json数据给后端、json数据在请求正文中、后端接收json数据

@RequestMapping("/r8")    
public String r8(@RequestBody UserInfo userInfo){        
    return userInfo.toString();    
}

2.9获取url中的参数

@RequestMapping("/r9/{articleId}")    
public String r9(@PathVariable Integer articleId){        
    return "articleId:"+articleId;   
}

2.10获取url中的参数并对参数进行重命名

将url中的参数name重命名为userName:

@RequestMapping("/r10/{name}/{age}")    
public String r10(@PathVariable("name") String userName, @PathVariable Integer age){        
    return "name:"+userName+",age:"+age;    
}

2.11上传文件

即获取请求中的文件。@RequestPart这个注解不写也行,这个注解可以对file进行重命名。

@RequestMapping("/r11")    
public String r11(@RequestPart MultipartFile file) throws IOException {        
    String fileName = file.getOriginalFilename();        
    file.transferTo(new File("D:/temp/"+fileName));          
    return "获取上传文件: "+file.getOriginalFilename();    
}

三、获取cookie和session

3.1传统方式获取cookie(可以获取到所有的cookie)

@RequestMapping("/getCookie1")    
public String getCookie(HttpServletRequest request){        
    Cookie[] cookies = request.getCookies();
    //Arrays.stream(cookies).forEach(x -> System.out.println(x.getName()+":"+x.getValue()));        
    if (cookies!=null){            
        for (Cookie c: cookies){                
            System.out.println(c.getName()+":"+c.getValue());         
        }           
         return "获取Cookie成功";      
    }          
    return "Cookie 为空";    
}

3.2简洁方式获取cookie(可以获取到指定的cookie)

@RequestMapping("/getCookie2")    
public String getCookie2(@CookieValue("byte") String byte){   
    return "byte:" + byte;    
}

3.3传统方式设置session和获取session

@RequestMapping("/setSession")
public String setSession(HttpServletRequest request){
    HttpSession session = request.getSession();
    session.setAttribute("userName","zhangsan");
    return "设置Session成功";
}

@RequestMapping("/getSession1")
public String getSession(HttpServletRequest request){
    HttpSession session = request.getSession();
    String userName = (String)session.getAttribute("userName");
    return "登录用户:"+ userName;
}

3.4简洁方式获取session

简洁方式1获取session:

@RequestMapping("/getSession2")
public String getSession(HttpSession session){//如果后端还没有session则HttpSession session会帮我们创建一个session,只是这个session里面没有内容。这预防了空指针异常的出现。
    String userName = (String)session.getAttribute("userName");
    return "登录用户:" + userName;
}

简洁方式2获取session:

@RequestMapping("/getSession3")
public String getSession(@SessionAttribute(value = "userName", required = false) String userName){
    return "登录用户:" + userName;
}

四、获取header

4.1传统方式获取header,可以获取到全部header

@RequestMapping("/getHeader")    
public String getHeader(HttpServletRequest request){        
    String userAgent = request.getHeader("User-Agent");        
    return "userAgent:"+userAgent;    
}

4.2简洁方式获取header

这种方式想获取到全部header则参数声明要写得非常长。

@RequestMapping("/getHeader2")
public String getHeader2(@RequestHeader("User-Agent") String userAgent){
    return "userAgent:"+userAgent;
}

五、返回响应

(1)返回静态页面。
(2)返回数据。
(3)返回HTML片段。
(4)返回json。
(5)设置状态码、编码方式、header。

元注解(即可以注解到其它注解的注解):
1)@Target({ElementType}.TYPE):表示注解的使用范围,TYPE表示注解的使用范围是类。
2)@Retention(RetentionPolicy.RUNTIME):表示注解的生命周期。
3)@Documented。

@RestController=@Controller+@ResponseBody。
@Controller是在告诉Spring,Spring要帮我们管理哪些程序,用@Controller修饰则默认返回的是页面。
@ResponseBody表示返回数据,其既可以修饰类又可以修饰方法,修饰类表示该类内的所有方法返回的都是数据,修饰方法表示该方法返回的是数据。文章来源地址https://www.toymoban.com/news/detail-805880.html

@Controller
//@RestController
@RequestMapping("/return")
public class ReturnController {
    @RequestMapping("/r1")
    public String r1(){
        return "/index.html";//返回静态页面
    }

    @ResponseBody
    @RequestMapping("/r2")
    public String r2(){
        return "hello, spring";//返回数据
    }

    @ResponseBody
    @RequestMapping("/r3")
    public String r3(){
        return "<h1>我是返回的html片段</h1>";//返回html片段
    }

    @ResponseBody
    @RequestMapping("/r4")
    public UserInfo r4(){
        UserInfo userInfo = new UserInfo();
        userInfo.setId(1);
        userInfo.setName("lingliang");
        userInfo.setAge(16);
        return userInfo;//返回json。当方法返回值类型为对象的时候,Spring会把响应的Content-Type自动设置为application/json。当返回的是数据,方法返回值类型为String的时候,默认情况下,Spring会把响应的Content-Type自动设置为text/html。
    }

    @ResponseBody
    @RequestMapping("/r5")
    public Map<String,String> r5(){
        HashMap map = new HashMap();
        map.put("k1","v1");
        map.put("k2","v2");
        return map;//Spring会把响应的Content-Type自动设置为application/json。
    }

    @RequestMapping("/r6")
    public String r6(){
        return "/a.js";//Spring会把响应的Content-Type自动设置为application/javascript。
    }

    @RequestMapping("/r7")
    public String r7(){
        return "/b.css";//Spring会把响应的Content-Type自动设置为text/css。
    }

    @ResponseBody
    @RequestMapping("/r8")
    public String r8(HttpServletResponse response){
        response.setStatus(401);
        return "设置状态码成功";//设置状态码。状态码不影响界面的展示。
    }

    @ResponseBody
    //@RequestMapping("/r9")
    @RequestMapping(value = "/r9", produces = "application/json; charset=utf8")//设置响应的Content-Type,因为当返回的是数据,方法返回值类型为String的时候,默认情况下,Spring会把响应的Content-Type自动设置为text/html。
    public String r9(){
        return "{\"OK\":1}";//返回的是一个json数据。
    }

    @ResponseBody
    @RequestMapping(value = "/r10")
    public String r10(HttpServletResponse response){
      response.setHeader("myHeader","myHeaderValue");//设置自定义的header。
        return "设置header成功";
    }
}

到了这里,关于Spring MVC中的常用注解及其用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring MVC:常用参数(注解)的使用和参数绑定的验证

    Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)(第2版) Spring MVC常用参数 Spring MVC简单应用 Spring MVC参数绑定 本实验采用的是本地安装的tomcat8.5.0版本 (1)创建maven 管理的java web工程 (2)添加本地tomcat war包 (3)实验过程 输出Hello Word 访问端口:http://localhost:8080/chapter1

    2024年02月04日
    浏览(42)
  • 在 Spring MVC 中,用于接收前端传递的参数的注解常用的有以下几种

    目录 1、对于json请求体参数, 2、对于路径传参 3、对于query传参 4、对于form-data参数, 总结:   1、对于json请求体参数, 请求头的Content-Type应为application/json。在前端,可以使用 data格式 传参。在后端,可以使用 @RequestBody 注解来接收参数。   2、对于路径传参 (例如:test/

    2024年01月23日
    浏览(42)
  • Spring-mvc的参数传递与常用注解的解答及页面的跳转方式---综合案例

    目录 一.slf4j--日志 二.常用注解        2.1.@RequestMapping       2.2.@RequestParam       2.3.@RequestBody       2.4.@PathVariable 三.参数的传递 3.1 基础类型 3.2 复杂类型 3.3 @RequestParam 3.4  @PathVariable 3.5 @RequestBody 3.6 增删改查  四.返回值            4.1 void 返回值   4.2 String

    2024年02月09日
    浏览(50)
  • 【Spring MVC】Spring MVC基于注解的程序开发

    目录 一、什么是Spring MVC  二、Spring MVC项目的创建和使用 1、实现客户端和服务器端之间的连接 1.1、RequsestMapping注解 1.2、@RequestMapper的简单使用  1.3、使用@GetMapping和@POSTMapping注解来实现HTTP连接 三、获取参数 1、实现获取单个参数 2、实现获取对象 3、后端参数重命名(@Requ

    2024年02月13日
    浏览(48)
  • 【Spring MVC】Spring MVC的功能使用和相关注解介绍

    Spring MVC主要有三个功能: 连接 获取参数 输出数据 对于 Spring MVC 来说,掌握了以上 3 个功能就相当于掌握了Spring MVC。 连接的功能:将⽤户(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的Spring 程序。 先创建一个SpringMVC项目,过程和SpringBoot项目创建相

    2024年02月16日
    浏览(43)
  • 【Spring】— Spring MVC的注解

    1.DispatcherServlet DispatcherServlet的全名: org.Springframework.web.servlet.DispatcherServlet 它在程序中充当着前端控制器的角色。 【示例】在使用DispatcherServlet时,只需将其配置在项目的web.xml文件中,其配置代码如下。 在上述代码中, load-on-startup 元素和 init-param 元素都是可选的。如果 lo

    2024年02月10日
    浏览(36)
  • 【Spring MVC】快速学习使用Spring MVC的注解及三层架构

    💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:【Spring MVC】快速学习使用Spring MVC的注解及三层架构 🎉欢迎大家点赞👍评论📝收藏⭐文章 SpringWebMVC是基于ServletAPI构建的原始Web框架,从⼀开始就包含在Spring框架中。它的正式名称“SpringWebMVC”来⾃其源模块的名称(Spri

    2024年04月17日
    浏览(50)
  • Spring MVC 三 :基于注解配置

    Servlet3.0 Servlet3.0是基于注解配置的理论基础。 Servlet3.0引入了基于注解配置Servlet的规范,提出了可拔插的ServletContext初始化方式,引入了一个叫ServletContainerInitializer的接口。 An instance of the ServletContainerInitializer is looked up via the jar services API by the container at container / application sta

    2024年02月11日
    浏览(37)
  • Spring MVC 的RequestMapping注解

    作用:用于建立请求URL和处理请求方法之间的对应关系。 出现位置: 类上: 请求 URL的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。它出现的目的是为了使我们的 URL 可以按照模块化管理,例如: 账户模块: /account /add /account /update /account

    2024年02月02日
    浏览(38)
  • Spring MVC-@RequestMapping注解详解

    目录 1、@RequestMapping注解的作用 2、@RequestMapping注解的位置 3、value属性 (1)基础用法 (3)路径中的占位符(重点) 4、method属性 5、params属性(了解) 6、headers属性(了解) @RequestMapping注解的作用,就是 将请求和处理请求的控制器方法关联起来 ,建立映射关系。 SpringMVC接

    2023年04月24日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包