SpringMVC前后台参数传递

  首先简单了解一下注解 @Controller、@RestController、@RequestMapping、@GetMapping、@PostMapping、@PathVariable、@RequestParam、@RequestBody、@ResponseBody;

  @Controller:作用于类上;使用此注解,表明当前类作为一个URL映射类。具体的URL映射需要配合@GetMapping 或者@PostMapping使用

  @RestController:与Controller注解作用一致,区别在于使用此注解相当于为当前类的URL映射方法默认加上注解@ResponseBody。

  @GetMapping:作用于方法上,映射URL,且请求方式为GET请求

  @PostMapping:作用于方法上,映射URL,且请求方式为POST方式

  @RequestMapping:作用于方法上,映射URL,如果不指定method的值,则表明接口请求方式随意。通过method属性,可以指定具体请求方式GET/POST

  @PathVariable:作用于参数上,指定参数的值取自URL中的某个字段值。

  @RequestParam:作用于参数上,指定参数的值取值请求参数中的某个字段值

  @RequestBody:作用于参数上,将参数封装进当前参数对象

  @ResponseBody: 作用于方法上,响应接口返回数据给前台

  

  接下来了解一下 ajax的一些重要参数:url、data、type、contentType、dataType、success、error;

  URL:对应后台需要请求的url

  data:请求需要传递的参数数据

  type:值为get、post

  contentType:默认值: "application/x-www-form-urlencoded"。发送信息至服务器时内容编码类型。

  dataType:表明后端请求成功后返回的数据类型。

  success:请求成功后的回调接口

  error:请求错误后的回调接口

  其他参数请参考:  http://www.w3school.com.cn/jquery/ajax_ajax.asp

  Now ,开始

————————————————————————————————————————————————————————————————————————————————

  1、后台接口:收到参数name,并将name值响应给前台

  

    @GetMapping("/test")
    @ResponseBody
    public String test(String name){
        return name;
    }

前台请求方式

——————————————————————————————————————————————————————————————————————————————————

  2、后台接口:将参数放在url中

    @ResponseBody
    @RequestMapping("/test/{name}")
    public String test2(@PathVariable("name") String name){
        return name;
    }

前台请求:

————————————————————————————————————————————————————————————————————————————————————————

  3、后台接口:此接口与实例1,大同小异。关键点在于前台传递的参数名称,@RequestParam就是用来解决前后台参数不一致的问题

    @RequestMapping("/test2")
    @ResponseBody
    public String test3(@RequestParam("name") String name){
        return name;
    }

前台请求:

————————————————————————————————————————————————————————————————————————————————————————————

  4、后台请求:

    @ResponseBody
    @PostMapping("/formSubmit")
    public User test(User user){
        return user;
    }

前台页面:html5,button默认具有提交表单功能

    <form action="/formSubmit" method="post">
        <input type="text" name="name" placeholder="姓名">
        <input type="text" name="address" placeholder="地址">
        <input type="text" name="school" placeholder="学校">
        <input type="number" name="height" placeholder="身高">
        <button>submit</button>
    </form>

前台需要关注的动作:

结果:

————————————————————————————————————————————————————————————————————————————————————

5、下面说明下前台的ajax异步请求方式。

ajax这里不再使用原始,直接使用jquery提供的封装;再次申明一点,使用ajax,后台的接口必须添加@ResponseBody注解,或者类上添加了@RestController,表明这是一个restful接口;

Ajax基本的结构如下:

      $.ajax({
           url: ‘‘,
           type: ‘‘,
           dataType: ‘‘,
           data:‘‘,
           contentType: ‘‘,
           success:function (result) {
                console.log(result);
           },
           error:function () {

           }
       });

对于上面的 1、3 两种类型的URL,可以直接替换这里的url参数,data可以不填写;或者 data:{"name":"章三"} 这种形式传递;此处注意ajax的type类型必须是GET类型。因为是get请求,jquery才会将data中的数据追加到url后面,如下:

————————————————————————————————————————————————————————————————————————————————————————

序列化表单提交:

       var data =  $("#myForm").serialize();
       $.ajax({
           url: ‘/formSubmit2‘,
           type: ‘POST‘,
           dataType: ‘text‘,
           data:data,
           success:function (result) {
                console.log(result);
           },
           error:function () {

           }
       });

后台:

    @ResponseBody
    @PostMapping("/formSubmit")
    public User test(User user){
        return user;
    }

前台请求

前台响应:

——————————————————————————————————————————————————————————————————————————————————

接下来通过前台传递json给后台

后台:

    @ResponseBody
    @PostMapping("/formSubmit2")
    public User test2(@RequestBody User user){
        return user;
    }

    @ResponseBody
    @PostMapping("/formSubmit3")
    public Map test(@RequestBody Map user){
        return user;
    }

以上两种方式都可以接收json数据,当然其他类型也是可以的

前台JS:

    var data = $("#myForm").serializeObject();
       $.ajax({
           url: ‘/formSubmit2‘,
           type: ‘POST‘,
           dataType: ‘text‘,
           data:JSON.stringify(data),
           contentType: ‘application/json;charset=UTF-8‘,
           success:function (result) {
                console.log(result);
           },
           error:function () {

           }
       });

??:这里的contentType类型,以及data实际是一个json格式字符串。

——————————————————————————————————————————————————————————————————————————

以上就是SpingMVC基本数据传递的方式,主要几点:1:URL要能相互照应;2:请求类型要符合后端接口要求 3:请求数据格式呀符合要求; 4:要学会排查问题,主要确定问题位置,区别前段问题还是后段问题,前段问题主要靠浏览器控制台来确定URL的请求、请求方式、请求参数、参数类型。后端主要是注解的使用要符合要求,以及参数封装要正确。

created at 2018-10-23 21:13

原文地址:https://www.cnblogs.com/funmans/p/9839440.html

时间: 2024-08-03 10:47:23

SpringMVC前后台参数传递的相关文章

springMVC 前后台日期格式传值解决方式之二(共二) @InitBinder的使用

关于springmvc日期问题的解决方式 除了本博客的[springMVC 前后台日期格式传值解决方式之 @DateTimeFormat的使用和配置]一文, 还有如下这种方式: 在Controller里加上这段代码: 1 @InitBinder 2 public void initBinder(ServletRequestDataBinder binder) { 3 /** 4 * 自动转换日期类型的字段格式 5 */ 6 SimpleDateFormat sdf = new SimpleDat

springMVC前后台数据交互

假设项目需求是在springMVC框架下,后台要传送一个list到前台,那我们就要做以下几个步骤: 1 在web.xml文件中进行springMVC的配置: <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://

springmvc——url参数传递

在学习 Spring Mvc 过程中,有必要来先了解几个关键参数:    @Controller: 在类上注解,则此类将编程一个控制器,在项目启动 Spring 将自动扫描此类,并进行对应URL路由映射. 1 2 3 4 5 @Controller public class UserAction {     }  @RequestMapping 指定URL映射路径,如果在控制器上配置 RequestMapping  ,具体请求方法也配置路径则映射的路径为两者路径的叠加 常用映射如:Request

springMVC 前后台日期格式传值解决方式之一(共二) @DateTimeFormat的使用和配置

无意中发现对于时间字符串转Date类,根本不用自己去写转换类,spring mvc已经实现了该功能,还是基于注解的,轻松省事,使用 org.springframework.format.support.FormattingConversionServiceFactoryBean 之后,只要在vo里加注解就行了 使用时要引入一个类库joda-time-n.n.jar Java代码   @DateTimeFormat(pattern="yyyy-MM-dd") private Date d

Java 系列之spring学习--springmvc注解参数传递(六)

一.绑定参数注解如下 @RequestParam     绑定单个请求数据,既可以是URL中的参数,也可以是表单提交的参数或上传的文件. 它有三个属性:  value    用于设置参数名. defaultValue    用于对参数设置默认值.         required    用于设置是否必需值,默认为true.为true时,如果参数为空,会报错. @PathVariable    绑定URL中的参数值 它只有一个属性值value 访问地址:http://localhost:8080/

SpringMvc参数传递中乱码问题

问题描述: 当传递中文参数到controller类时,无乱是get方式还是post方式都出现乱码 解决: 1.保证所有的页面编码都是utf-8,包括jsp页面,浏览器编码设置和eclipse的编码设置. 2.spingmvc给我们提高了一个编码过滤器,只需要在配置文件web.xml中加入即可.如下: 1 <filter> 2 <filter-name>characterEncoding</filter-name> 3 <filter-class>org.sp

SpringMVC 多个对象的相同字段参数传递的最佳解决方案

SpringMVC 多个对象的相同字段参数传递解决方案,在SpringMVC中,有时需要传递多个对象(除了Model和web元素) 众所周知,在SpringMVC中不支持类似struts2的点语法传参法则,因此多个对象同名参数传递势必会造成一定的问题. SpringMVC的参数传递非常智能,可自动装配参数到对象 public class User{  private String name;  private String id;  private String gender,  private

springMVC 相对于 Structs 的优势

智者说,没有经过自己的思考和估量,就不能接受别人的东西.资料只能是一个参考,至于是否正确,还得自己去分辨 SpringMVC相对于Structs的几个优势: 1.springMVC安全性更高,structs2框架是类级别的拦截,每次request请求structs2都会为之创建一个action,然后将数据注入到实体been中,所以在structs2中,一个action对应一个request上下文.springMVC是方法级别的拦截,每个request对应一个方法,然后通过注解将数据注入到对应的实

SpringMVC之拦截器实现登录验证

今天回头看之前发的javaweb学习路线图,发现把路线图中的也学的有一半多了,不过还是路漫漫.在前面的博客中有学习过spring的aop,它利用动态代理实现,在springmvc中也是一样,今天使用HandlerInterceptor来实现登录权限验证.我们平时在做系统时有些页面是需要先登录才能访问的,一种方法是在每个请求方法中都做登录判断,这样顶多是把登录功能封装起来,以后没新增一个代码都要加上,这样很不方便.其实这里我们可以使用拦截器进行登录验证,判断是否有session,如果有sessio