如何使用@RequestBody注解处理Ajax请求?

2026-05-26 01:181阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1391个文字,预计阅读时间需要6分钟。

如何使用@RequestBody注解处理Ajax请求?

目录 + @RequestBody 注解 Ajax post json List 集合数据请求400/415错误:

1.post发送的json数据错误

2.Spring或Maven版本过低导致Jackson包没有导入

3.json数据与对象数据转换出现疑问

$.ajax中关于get、post与@Request的用法

目录
  • @RequestBody注解Ajax post json List集合数据请求400/415
    • 1.post发送的json数据错误
    • 2.Spring或maven版本过低导致jackson包没有导入
    • 3.json数据和对象数据转换出问题
  • $.ajax 中关于get、post 与@RequestBody和@RequestParam使用注意
    • 前端发送复杂JSON数据,后端使用@RequestBody接收
    • @RequestParam 介绍
    • @RequestBody 介绍
    • 不加注解接收

如何使用@RequestBody注解处理Ajax请求?

@RequestBody注解Ajax post json List集合数据请求400/415

该问题出现在ajax发送post请求时返回错误代码,后台不报任何错误

问题原因和解决方法:

1.post发送的json数据错误

@RequestBody注解是把post请求的整体数据进行处理,@RequestBody后面的参数是和json数据没有关系的,比如

@RequestBody List<CourseVo> courseVos; //此句的courseVos不用在json数据中包含!!!!!

发送该数据的js为下

$.ajax({      type: "post",      url: '/beansOffice/addCourseData',      dataType:"json",      contentType:"application/json",      data: JSON.stringify(this.courseView),//此块注意      //注意数据是data: JSON.stringify(this.courseView)         //而不是data: JSON.stringify({courseVos:this.courseView})      //两者区别就是有没有把@RequestBody注解后的“courseVos”当为json数据      success: function (data) {         if (data.status == 200 && data.body.code == 200)               alert("提交成功!");      } });

2.Spring或maven版本过低导致jackson包没有导入

jackson是spring默认的json处理工具,没有该包则会对一些复杂对象会处理异常

依赖包为下(当前最新):

<dependency>     <groupId>org.codehaus.jackson</groupId>     <artifactId>jackson-core-asl</artifactId>     <version>1.9.13</version> </dependency> <dependency>     <groupId>org.codehaus.jackson</groupId>     <artifactId>jackson-mapper-asl</artifactId>     <version>1.9.8</version> </dependency>

3.json数据和对象数据转换出问题

这个问题很容易出,由于异常被吃掉很不容易发现

比如对象中定义数据 int a;但是你有可能默认值是“”,即空字符串,则也会直接报400错误而后台没有任何异常

还有一些比如时间类型(data)、布尔(boolean)或自定义类型,建议所有都使用String,自己手动在后台转换,这样报错也会被发现

$.ajax 中关于get、post 与@RequestBody和@RequestParam使用注意

1、在GET请求中,不能使用@RequestBody。因为往GET请求里加body是不符合规范的,不保证所有的实现都支持,所以在ajax 里注意请求方式如果用 get 后端参数不能用 @RequestBody 来接收它。(所以本人在 ajax ,或者什么表单,一般爱好用post,既安全,又能解决中文乱码问题)

2、在POST请求,可以使用@RequestBody和@RequestParam,但是如果使用@RequestBody,对于参数转化的配置必须统一。可以使用多个@RequestParam获取数据,@RequestBody不可以只能一个。

3、ajax请求默认 contentType=application/x-www-form-urlencoded;charset:utf-8,此格式为表单提交格式,数据为key1=value1&key2=value2格式

不使用contentType:‘application/json;charset=UTF-8’, 则data里可以是json对象的属性

$.ajax({     url: "",     type: "POST",     dataType: "JSON",     data: {"id": 1},     async: false,     success: function(){          } });

注意:data 右边花括号外边是没有双引号或引号的 “” ‘’,所以data叫做 json对象,而不是叫json字符串,里面是其属性。(所以上面是不使用contentType:'application/json;charset=UTF-8’的例子)

使用contentType:'application/json;charset=UTF-8’的例子:就得使用json字符串而非 JSON 对象了

$.ajax({     url: "",     type: "POST",     dataType: "JSON",     contentType: "application/json",     data: "{'id': "+ 1 + "}",     async: false,     success: function(){          } });

data 右边括号外有引号的叫 JSON 字符串

前端发送复杂JSON数据,后端使用@RequestBody接收

举例子:

$.ajax({     url: "",     type: "POST",     dataType: "JSON",     contentType: "application/json;charset=UTF-8",     data: JSON.stringify({         id:"1"     }),     async: false,     success: function(){          } });

后端用 @RequestBody 来接收传过来的json字符串

注意:

  • JSON.stringify 是从一个对象中解析出字符串
  • JSON.parse是从一个字符串中解析出json(键值对)
  • 使用:contentType:‘application/json;charset=UTF-8’, 配合:data:JSON.stringify()

@RequestParam 介绍

主要用来接收GET请求拼接在URL后的参数,或者是POST传递,且Content-type为x-www-form-urlencoded方式。

因为不管是GET方式还是用x-www-form-urlencoded方式传递,参数都是以键值对方式拼接的,然后经过URLencoded编码,传递给服务端。

@RequestParam 只能接收简单参数类型,复杂的参数类型要用 @RequestBody 来接收,或者不加注解来接收。

@RequestBody 介绍

使用 @RequestBody 该注解,前端请求只能为 POST,因为该注解是从请求体中获得对象的。且请求头中的Content-type一般为application/json 方式。

所以使用该注解能够接收 JSON 格式的数据,并且能把接收到的 JSON 数据绑定到 JAVA 对象中。复杂对象包括List,实体类,Map对象等。

在用该注解的时候有两个注意事项:

  • 一个方法中只能有一个@RequestBody注解,但是@RequestBody注解可以和@RequestParam注解一起使用,而且@RequestParam注解一个方法中可以有多个。
  • @RequestBody注解的参数类型可以是复杂对象类。

不加注解接收

  • 不加注解接收参数,参数类型可以为简单类型,也可以为复杂类型(JAVA对象等,前端传递的参数会和类中的属性名对应并且绑定)。也就是两种类型都可接收。
  • 而且GET请求和POST请求也都能接收到参数。
  • 但是POST请求时,和@RequestParam注解一样,Content-type只能为x-www-form-urlencoded。
  • 不加注解可以接收复杂对象,但是不能接收Map类型的对象。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。

本文共计1391个文字,预计阅读时间需要6分钟。

如何使用@RequestBody注解处理Ajax请求?

目录 + @RequestBody 注解 Ajax post json List 集合数据请求400/415错误:

1.post发送的json数据错误

2.Spring或Maven版本过低导致Jackson包没有导入

3.json数据与对象数据转换出现疑问

$.ajax中关于get、post与@Request的用法

目录
  • @RequestBody注解Ajax post json List集合数据请求400/415
    • 1.post发送的json数据错误
    • 2.Spring或maven版本过低导致jackson包没有导入
    • 3.json数据和对象数据转换出问题
  • $.ajax 中关于get、post 与@RequestBody和@RequestParam使用注意
    • 前端发送复杂JSON数据,后端使用@RequestBody接收
    • @RequestParam 介绍
    • @RequestBody 介绍
    • 不加注解接收

如何使用@RequestBody注解处理Ajax请求?

@RequestBody注解Ajax post json List集合数据请求400/415

该问题出现在ajax发送post请求时返回错误代码,后台不报任何错误

问题原因和解决方法:

1.post发送的json数据错误

@RequestBody注解是把post请求的整体数据进行处理,@RequestBody后面的参数是和json数据没有关系的,比如

@RequestBody List<CourseVo> courseVos; //此句的courseVos不用在json数据中包含!!!!!

发送该数据的js为下

$.ajax({      type: "post",      url: '/beansOffice/addCourseData',      dataType:"json",      contentType:"application/json",      data: JSON.stringify(this.courseView),//此块注意      //注意数据是data: JSON.stringify(this.courseView)         //而不是data: JSON.stringify({courseVos:this.courseView})      //两者区别就是有没有把@RequestBody注解后的“courseVos”当为json数据      success: function (data) {         if (data.status == 200 && data.body.code == 200)               alert("提交成功!");      } });

2.Spring或maven版本过低导致jackson包没有导入

jackson是spring默认的json处理工具,没有该包则会对一些复杂对象会处理异常

依赖包为下(当前最新):

<dependency>     <groupId>org.codehaus.jackson</groupId>     <artifactId>jackson-core-asl</artifactId>     <version>1.9.13</version> </dependency> <dependency>     <groupId>org.codehaus.jackson</groupId>     <artifactId>jackson-mapper-asl</artifactId>     <version>1.9.8</version> </dependency>

3.json数据和对象数据转换出问题

这个问题很容易出,由于异常被吃掉很不容易发现

比如对象中定义数据 int a;但是你有可能默认值是“”,即空字符串,则也会直接报400错误而后台没有任何异常

还有一些比如时间类型(data)、布尔(boolean)或自定义类型,建议所有都使用String,自己手动在后台转换,这样报错也会被发现

$.ajax 中关于get、post 与@RequestBody和@RequestParam使用注意

1、在GET请求中,不能使用@RequestBody。因为往GET请求里加body是不符合规范的,不保证所有的实现都支持,所以在ajax 里注意请求方式如果用 get 后端参数不能用 @RequestBody 来接收它。(所以本人在 ajax ,或者什么表单,一般爱好用post,既安全,又能解决中文乱码问题)

2、在POST请求,可以使用@RequestBody和@RequestParam,但是如果使用@RequestBody,对于参数转化的配置必须统一。可以使用多个@RequestParam获取数据,@RequestBody不可以只能一个。

3、ajax请求默认 contentType=application/x-www-form-urlencoded;charset:utf-8,此格式为表单提交格式,数据为key1=value1&key2=value2格式

不使用contentType:‘application/json;charset=UTF-8’, 则data里可以是json对象的属性

$.ajax({     url: "",     type: "POST",     dataType: "JSON",     data: {"id": 1},     async: false,     success: function(){          } });

注意:data 右边花括号外边是没有双引号或引号的 “” ‘’,所以data叫做 json对象,而不是叫json字符串,里面是其属性。(所以上面是不使用contentType:'application/json;charset=UTF-8’的例子)

使用contentType:'application/json;charset=UTF-8’的例子:就得使用json字符串而非 JSON 对象了

$.ajax({     url: "",     type: "POST",     dataType: "JSON",     contentType: "application/json",     data: "{'id': "+ 1 + "}",     async: false,     success: function(){          } });

data 右边括号外有引号的叫 JSON 字符串

前端发送复杂JSON数据,后端使用@RequestBody接收

举例子:

$.ajax({     url: "",     type: "POST",     dataType: "JSON",     contentType: "application/json;charset=UTF-8",     data: JSON.stringify({         id:"1"     }),     async: false,     success: function(){          } });

后端用 @RequestBody 来接收传过来的json字符串

注意:

  • JSON.stringify 是从一个对象中解析出字符串
  • JSON.parse是从一个字符串中解析出json(键值对)
  • 使用:contentType:‘application/json;charset=UTF-8’, 配合:data:JSON.stringify()

@RequestParam 介绍

主要用来接收GET请求拼接在URL后的参数,或者是POST传递,且Content-type为x-www-form-urlencoded方式。

因为不管是GET方式还是用x-www-form-urlencoded方式传递,参数都是以键值对方式拼接的,然后经过URLencoded编码,传递给服务端。

@RequestParam 只能接收简单参数类型,复杂的参数类型要用 @RequestBody 来接收,或者不加注解来接收。

@RequestBody 介绍

使用 @RequestBody 该注解,前端请求只能为 POST,因为该注解是从请求体中获得对象的。且请求头中的Content-type一般为application/json 方式。

所以使用该注解能够接收 JSON 格式的数据,并且能把接收到的 JSON 数据绑定到 JAVA 对象中。复杂对象包括List,实体类,Map对象等。

在用该注解的时候有两个注意事项:

  • 一个方法中只能有一个@RequestBody注解,但是@RequestBody注解可以和@RequestParam注解一起使用,而且@RequestParam注解一个方法中可以有多个。
  • @RequestBody注解的参数类型可以是复杂对象类。

不加注解接收

  • 不加注解接收参数,参数类型可以为简单类型,也可以为复杂类型(JAVA对象等,前端传递的参数会和类中的属性名对应并且绑定)。也就是两种类型都可接收。
  • 而且GET请求和POST请求也都能接收到参数。
  • 但是POST请求时,和@RequestParam注解一样,Content-type只能为x-www-form-urlencoded。
  • 不加注解可以接收复杂对象,但是不能接收Map类型的对象。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。