基于springmvc之常用注解,操作传入参数

目录
  • springmvc常用注解,操作传入参数
    • @RequestParam
    • @RequestBody
    • @PathVariable
    • @RequestHeader
    • @CookieValue
    • @ModelAttribute
    • @SessionAttributes

springmvc常用注解,操作传入参数

@RequestParam

一般用于jsp参数名和后台方法参数指定,对应

/*
    * value=name 当jsp的参数和方法上的参数对应不上,可以指明
    * required() default true;默认true   有参数则必须传
    * */
    public String testRequestParam(@RequestParam(name = "name",required = false) String username){
        System.out.println("执行了..........");
        System.out.println(username);
        return "success";
    }
<body>
    <a href="anno/testRequestParam" rel="external nofollow"  rel="external nofollow" >testRequestParam</a>

</body>

不传参数,required()设置为false,方法有参数

测试

@RequestBody

一般用于获取post请求的方法体,jsp参数格式为键值对,即 key-value

该注解不适应于get请求,一般用于post请求,例如表单提交

如果要用于get请求,则需

@RequestBody(required = false)

否则报错,此时方法参数为null

@RequestMapping(path = "testRequestBody")
    public String testRequestBody(@RequestBody(required = false) String body){
        System.out.println("执行了..........");
        System.out.println(body);
        return "success";
    }
<body>
    <%--<a href="anno/testRequestParam" rel="external nofollow"  rel="external nofollow" >testRequestParam</a>--%>

    <form action="anno/testRequestBody" method="post">
        用户名:<input type="text" name="username"/><br>
        密码:<input type="text" name="password"/><br>
        <input type="submit" value="提交"/><br>
    </form>
</body>

测试

@PathVariable

URL的占位符,restful风格,传参格式 url地址后/10

restful请求方式: get,post,put 配合注解@RequestMapping设置请求方式

@RequestMapping(path = "testPathVariable/{sid}",method = RequestMethod.GET)
@RequestMapping(path = "testPathVariable/{sid}",method = RequestMethod.GET)
    /*
    * {sid}表示URL的占位符
    * boolean required() default true;默认参数必须传
    * */
    public String testPathVariable(@PathVariable("sid") String id){
        System.out.println("执行了..........");
        System.out.println(id);
        return "success";
    }
 <a href="anno/testPathVariable/10" rel="external nofollow" >testPathVariable</a>

可以下载postman客户端,模拟发送不同的请求方式

测试:

@RequestHeader

获取请求头的某些属性值 如浏览器类型、版本等 不常用

@RequestMapping(path = "testRequestHeader",method = RequestMethod.GET)
    /*获取请求头的某些属性值 如浏览器类型、版本等*/
    public String testRequestHeader(@RequestHeader(value = "Accept") String head){
        System.out.println("执行了..........");
        System.out.println(head);
        return "success";
    }
<a href="anno/testRequestHeader" rel="external nofollow" >testRequestHeader</a>

@CookieValue

获取JSESSIONID的值

@RequestMapping(path = "testCookieValue",method = RequestMethod.GET)
    public String testCookieValue(@CookieValue(value = "JSESSIONID") String JSESSIONID){
        System.out.println("执行了..........");
        System.out.println(JSESSIONID);
        return "success";
    }
  <a href="anno/testCookieValue" rel="external nofollow" >testCookieValue</a><br>

@ModelAttribute

用于封装的数据不全补全数据,或者检查封装数据等场景

可作用于方法和参数

修饰方法,方法入参需和控制器方法同参类型,该方法优先于控制器之前执行,且分类有返回值和无返回值

  • 有返回值,则该方法的返回值和控制器的入参相同相同
  • 无返回值,则该方法的参数除了和控制器的入参相同外,还需加一个map类型参数map<string,objct>

例子:

注解修饰的方法有返回值写法

 @RequestMapping(path = "testModelAttribute")
    public String testModelAttribute(User user){
        System.out.println("执行了..........");
        System.out.println(user);
        return "success";
    }

    @ModelAttribute
    //修饰方法,该方法优先于控制器之前执行
    public User showUser(User user){
        /*模拟jsp传的user封装数据不全,
        通过名字查询数据库对应的信息
        返回全的user对象*/
        user.setBirthday(new Date());
        return user;
    }
<form action="anno/testModelAttribute" method="post">
        用户名:<input type="text" name="uname"/><br>
        年龄:<input type="text" name="age"/><br>
        <input type="submit" value="提交"/><br>
    </form>

注解修饰的方法无返回值写法

@RequestMapping(path = "testModelAttribute")
    public String testModelAttribute(@ModelAttribute("key") User user){
        System.out.println("执行了..........");
        System.out.println(user);
        return "success";
    }

    @ModelAttribute
    //修饰方法,该方法优先于控制器之前执行
    public void showUser(User user, Map<String,User> userMap){
        /*模拟jsp传的user封装数据不全,
        通过名字查询数据库对应的信息
        返回全的user对象*/
        user.setBirthday(new Date());
        userMap.put("key",user);
    }

测试

@SessionAttributes

注解只能作用于类,用于存取数据到session域对象中,实现方法数据共享

实现方式:从request域对象中复制数据到session域中

/**
 * @Date 2019/9/12 2:05
 * by mocar
 */
@Controller
@RequestMapping(path = "/anno")
@SessionAttributes(names = {"msg"})//从request域对象中复制到session域对象
public class annoController {

    @RequestMapping("/setRequest")//存入
    public String setRequest(ModelMap modelMap){
        System.out.println("setRequest......");
        modelMap.addAttribute("msg","test");//往Request域对象存值
        return "success";
    }

    @RequestMapping("/getSession")//获取
    public String getSession(ModelMap modelMap){
        System.out.println("getSession.......");
        Object msg = modelMap.get("msg");
        System.out.println(msg.toString());
        return "success";
    }

    @RequestMapping("/delSession")//删除
    public String delSession(SessionStatus sessionStatus,ModelMap modelMap){
        System.out.println("delSession.......");
        sessionStatus.setComplete();
        Object msg = modelMap.get("msg");
        System.out.println(msg.toString());
        return "success";
    }

}

jsp:

     <br>
    <a href="anno/setRequest" rel="external nofollow" >setRequest</a><br>
    <a href="anno/getSession" rel="external nofollow" >getSession</a><br>
    <a href="anno/delSession" rel="external nofollow" >delSession</a><br>

success.jsp 设置不忽略EL表达式,显示session域数据

<%--
  Created by IntelliJ IDEA.
  User: Mocar
  Date: 2019/9/11
  Time: 4:34
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>快速入门</title>
</head>
<body>
    <h3>success</h3>

    ${sessionScope}

</body>
</html>

setsession

getsession

delsession

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 聊聊springmvc中controller的方法的参数注解方式

    绪论 相信接触过springmvc的同学都知道,在springmvc的控制层中,我们在方法的参数中可以使用注解标识.比如下面例子: public Map<String, Object> login(@PathVariable("loginParams") String loginParams) @PathVariable注解就标识了这个参数是作为一个请求地址模板变量的(不清楚的同学可以先学习一下restful设计风格).这些注解都是spring内置注解,那么 我们可不可以自

  • SpringMVC中常用注解与使用方法详解

    MVC简介 MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写, 是一种用于设计创建 Web 应用程序表现层的模式. Model(模型): 通常指的就是我们的数据模型.作用一般情况下用于封装数据. View(视图): 通常指的就是我们的 jsp 或者 html.作用一般就是展示数据的. 通常视图是依据模型数据创建的. Controller(控制器): 是应用程序中处理用户交互的部分.作用一般就是处理程序逻辑的.

  • Spring MVC常用客户端参数接收方式详解

    在MVC结构中,控制器组件主要的功能就是接收请求.处理请求.生成响应,接收客户端传来的请求参数的往往是控制器要做的第一件事. Book实体类Book.java public class Book { private Integer bookId; private String author; //生成Get.Set方法,此处省略 } 一.直接用参数名匹配请求参数 客户端界面(表单): <form action="/queryString" method="post&qu

  • 详解springmvc常用5种注解

    一.组件型注解: 1.@Component 在类定义之前添加@Component注解,他会被spring容器识别,并转为bean. 2.@Repository 对Dao实现类进行注解 (特殊的@Component) 3.@Service 用于对业务逻辑层进行注解, (特殊的@Component) 4.@Controller 用于控制层注解 , (特殊的@Component) 以上四种注解都是注解在类上的,被注解的类将被spring初始话为一个bean,然后统一管理. 二.请求和参数型注解: 1.

  • 基于springmvc之常用注解,操作传入参数

    目录 springmvc常用注解,操作传入参数 @RequestParam @RequestBody @PathVariable @RequestHeader @CookieValue @ModelAttribute @SessionAttributes springmvc常用注解,操作传入参数 @RequestParam 一般用于jsp参数名和后台方法参数指定,对应 /* * value=name 当jsp的参数和方法上的参数对应不上,可以指明 * required() default tru

  • spring springMVC中常用注解解析

    一,使用注解: 在spring的配置文件applicationContext.xml中,加入注解扫描.配置项就配置了对指定的包进行扫描,以实现依赖注入. <?xml version="1.0" encoding="UTF-8"?> <span style="font-size:18px;"><beans xmlns="http://www.springframework.org/schema/beans&q

  • SpringMVC中常用参数校验类注解使用示例教程

    目录 一.环境准备 二.常用的校验注解及示例 三.校验类方法中的普通参数 四.校验类方法中的自定义对象 五.关于@Valid和@Validated的区别联系 六.分组校验 七.自定义校验注解 一.环境准备 在项目中添加以下依赖 gradle org.hibernate:hibernate-validator:5.3.5.Final maven <dependency> <groupId>org.hibernate</groupId> <artifactId>

  • springmvc常用注解标签详解

     1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示.在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@Request

  • 基于SpringMVC接受JSON参数详解及常见错误总结

    最近一段时间不想使用Session了,想感受一下Token这样比较安全,稳健的方式,顺便写一个统一的接口给浏览器还有APP.所以把一个练手项目的前台全部改成Ajax了,跳转再使用SpringMVC控制转发.对于传输JSON数据这边有了更深的一些理解,分享出来,请大家指正. 在SpringMVC中我们可以选择数种接受JSON的方式,在说SpringMVC如何接受JSON之前,我们先聊聊什么是JSON.具体的定义我也不赘述了,在JavaScript中我们经常这样定义JSON 对象 var jsonO

  • SpringMVC结构简介及常用注解汇总

    MVC结构简介 Model(模型):数据模型,提供要展示的数据,因此包含数据和行为.现在一般分离为数据层Dao和服务层Service,提供了模型数据查询和模型数据的状态更新等功能. View(视图):负责进行模型的展示,一般指用户界面. Controller(控制器):接受用户请求,并委托模型进行处理(状态改变),处理完返回模型数据给视图,交由视图进行展示. SpringMVC简介 SpringMVC是SpringFramework的一部分,是Java实现MVC的轻量级Web框架. Spring

  • SpringMVC常用注解载入与处理方式详解

    目录 一 . 前言 二 . RestController 部分 三 . RequestMapping 部分 四 . RequestParam和PathVariable 五 . RequestBody 和 ResponseBody 总结 一 . 前言 这一篇来看一下SpringMVC 中各个注解载入的方式和处理的时机 二 . RestController 部分 RestController 注解主要的作用是Bean的加载 , 值得关注的注解包括 : @Controller 和 @ResponseB

  • java基于正则表达式实现时间日期的常用判断操作实例

    本文实例讲述了java基于正则表达式实现时间日期的常用判断操作.分享给大家供大家参考,具体如下: 最近需要完成一个判断用户输入时间日期类型来进行相应操作的业务.实现这个功能自然少不了用到正则表达式,提高正则表达式的话,其实它的用法很简单,只需把这个表格记住并且会灵活运行就可以了. 元字符 描述 \ 将下一个字符标记为一个特殊字符.或一个原义字符.或一个向后引用.或一个八进制转义符.例如,"\n"匹配字符"n"."\\n"匹配一个换行符.序列&qu

  • mybatis-plus分页传入参数后sql where条件没有limit分页信息操作

    折腾了差不多两个小时,各种方法尝试,后来想想应该是where过滤后的数据量没有达到默认一页规定的数量所以干脆where就不显示limit信息了,试了一下还真是...这作者还真是把程序做的足够智能,可是这个智能也让我白白花掉了两个小时...还是自己太笨了-- 但是奇怪的是,如果我不设置QueryWrapper参数,where后面的分页限制又是可以出来的.百思不得其解作者的想法... 具体看代码: @Override public PageUtils queryPage(Map<String, Ob

随机推荐