@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类型的对象。

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

@RequestBody注解Ajax post json List集合数据请求400/415的处理的更多相关文章

  1. ios – 将视频分享到Facebook

    我正在编写一个简单的测试应用程序,用于将视频从iOS上传到Facebook.由于FacebookSDK的所有文档都在Objective-C中,因此我发现很难在线找到有关如何使用Swift执行此操作的示例/教程.到目前为止我有这个在我的UI上放置一个共享按钮,但它看起来已禁用,从我读到的这是因为没有内容设置,但我看不出这是怎么可能的.我的getVideoURL()函数返回一个NSURL,它肯定包含视

  2. ios – 错误域= NSURLErrorDomain代码= -1003“找不到具有指定主机名的服务器

    当我尝试在设备上运行应用程序时出现此错误.当我在模拟器上运行它并且post请求正常工作时,我没有收到此错误.这是我的代码片段:任何帮助表示赞赏.谢谢解决方法此错误通常会提示DNS相关问题.检查设备上的DNS设置并确认您可以使用Safari或其他浏览器浏览互联网.如果有一个url,你可以在同一台服务器上获取,尝试直接在设备上的Safari中访问它.

  3. ios – Xcode Bot:如何在post触发器脚本上获得.ipa路径?

    我正在使用机器人来存档iOS应用程序,我需要获取.ipa产品路径才能将其发布到我们的分发系统中.机器人设置:并使用脚本打印所有env变量,其中不包含ipa文件的路径.此外,一些变量指向不存在的目录,即:XCS_OUTPUT_DIR这里的env变量输出:除此之外,我还能够确认.ipa文件是在另一个文件夹中创建的(/IntegrationAssets//

  4. ios – 使用CocoaPods post install hook将自定义路径添加到HEADER_SEARCH_PATHS

    解决方法在Podfile中定义一个方法:然后在post_install中调用该方法:

  5. iOS7 Safari中的全屏模式

    我正在使用SenchaTouch开发移动网站.在iOS7Safari中,我无法创建顶级地址栏和下面的工具栏消失了.Sencha过去常常处理iOS6,但iOS7最近的一些变化导致了这个问题.http://java.dzone.com/articles/safari-ios-7-and-html5我阅读了上面的链接&对于HTML5游戏而言,这似乎也是一个问题.一些其他应用程序.适用于iOS6的旧win

  6. ios – 如何使用新的Apple Swift语言发布JSON

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  7. ios – POST请求使用application / x-www-form-urlencoded

    后端开发人员在POST请求中给出了这些说明:>路线:{url}/{app_name/{controller}/{action}控制器和动作应该是小帽子.>API测试链接:http:****************>请求应该使用POST方法.>参数应通过请求内容体(FormUrlEncodedContent)传递.>参数应该是json格式.>参数是关键的.在协议中没有经验5,我搜索并结束了我的代码.

  8. 从iOS应用程序发送帖子到PHP脚本不工作…简单的解决方案就像

    我之前已经做了好几次了但是由于某些原因我无法通过这个帖子…我尝试了设置为_POST且没有的变量的PHP脚本……当它们未设置为发布时它工作精细.这是我的iOS代码:这里是PHP的一大块,POST变量不在正确的位置?我想这对于更有经验的开发人员来说是一个相当简单的答案,感谢您的帮助!解决方法$_POST是一个数组,而不是一个函数.您需要使用方括号来访问数组索引:

  9. ios – 在HTTPBody中设置NSDictionary并使用POST方法发送

    我想用POST方法调用Web服务.我需要发布一个带有URL的字典.我的Web服务参数如下:以下是我的要求:但是我收到以下错误:服务器拒绝此请求,因为请求实体的格式不受所请求方法所请求资源的支持解决方法请找到以下代码,将数据发布到Web服务.请注意这是我在我的一个申请中使用的样本.希望这可以帮助.从您的评论“服务器拒绝此请求”服务器是否支持JSON或XML格式.

  10. ios – 如何使用Firebase存储喜欢的内容

    我有一个关于firebase的后端,有像Facebook这样的帖子.所以我需要喜欢这些帖子的功能.问题是如何存储喜欢帖子的喜欢和用户?

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部