我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringMVC@RequestBody自动转jsonHttp415错误的解决

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringMVC@RequestBody自动转jsonHttp415错误的解决

SpringMVC @RequestBody自动转json Http415错误

项目中想用@RequestBody直接接收json串转成对象

网上查了使用方法,看着非常简单,不过经过测试很快发现页面直接报415错误。

<body>
        <h1>HTTP Status 415 - </h1>
        <HR size="1" noshade="noshade">
            <p>
                <b>type</b> Status report
            </p>
            <p>
                <b>message</b>
                <u></u>
            </p>
            <p>
                <b>description</b>
                <u>The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.</u>
            </p>
         <HR size="1" noshade="noshade">
            <h3>Apache Tomcat/6.0.41</h3>
</body>

经过一通查,多半的解决方法实说header里的 Content-Type 一定 application/json

但是问题依然没有解决。

最后在《Spring in Action》里找到一个信息

有两个前提条件:

The request’sContent-Typeheader must be set toapplication/json.

The JacksonJSONlibrary must be available on the application’s classpath. 

我满足了第一个,所以在classpath中添加了一个jar。问题解决了。

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.5.3</version>
        </dependency>

所以如果大家遇到了同样的问题,可以先排除一下这两个因素。

还有一种情况,在以上两个条件都满足的情况下,还是报同样的错误。

在springmvc的配置文件中必须有:

    <!-- 默认的注解映射的支持 -->
    <mvc:annotation-driven />

如果没有这个配置也是会报这个错的!

为什么会引入jackson-databind包呢,因为默认的配置会用到:

com.fasterxml.jackson.databind.ObjectMapper

<mvc:message-converters>
            <bean
                class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="com.fasterxml.jackson.databind.ObjectMapper">
                        <property name="dateFormat">
                            <bean class="java.text.SimpleDateFormat">
                                <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />
                            </bean>
                        </property>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>

SpringMVC @RequestBody使用

Spring mvc是一个非常轻量的mvc框架,注解可以大大减少配置,让请求的拦截变得比较简单。这次记录下@RequestBody 注解接收参数尤其是数组参数的用法。

关于容器的配置不再多说,这里写出spring-servlet.xml的sechme:

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:task="http://www.springframework.org/schema/task"
	xsi:schemaLocation="http://www.springframework.org/schema/context    
          http://www.springframework.org/schema/context/spring-context-4.0.xsd    
          http://www.springframework.org/schema/beans    
          http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
          http://www.springframework.org/schema/mvc
          http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd">
          <!-- 扫描包注解 -->
	<context:component-scan base-package="xxxx"></context:component-scan>
	<!-- mvc注解功能启动 -->
	<mvc:annotation-driven />
</beans>

只要对应包名下面的添加注解即可扫描到对应的控制器,一般采用@Controller

  • RequestBody接收基本类型
@Controller
public class TestController {
	// url请求拦截
	@RequestMapping("test/test.do")
	@ResponseBody // 返回参数为JSON
	public void test(@RequestBody String name) {
		System.out.println("getParams : " + name);
	}![](https://img-blog.csdn.net/20161114115809292)
}

@RequestBody只要接收POST请求Body里的数据。

这样发送请求,即可在java控制台中打印:

getParams : {"name":"micro"}

  • @RequestBody接收基本数组

然后我们接收基本类型数组:

	@RequestMapping("test/test.do")
	@ResponseBody
	public void test(@RequestBody List<String> nameList) {
		System.out.println("getParams : " + nameList);
	}

这样即可获取到参数,不要body里写成了{“nameList”:[“name1”,“name2”]}这样会抛出异常。

@RequestBody是对应的POST请求的body,body即是获取的参数,如果想通过参数去获取,则要使用@RequestParams 注解:

	@RequestMapping("test/test.do")
	@ResponseBody
	public void test(@RequestParam("name") String name) {
		System.out.println("getParams : " + name);
	}

注意是GET请求,参数直接放到URL后面,这样就可以使用@RequestParams获取到对应参数名的参数值。

如果是复杂的对象。

@RequestBody的使用。

定义model:

class Person {
	private Long id;
	private String name;
	// setter getter
}
  • @RequestBody接收复杂对象

接收参数的方式

@RequestMapping("test/test.do")
	@ResponseBody
	public void test(@RequestBody Person person) {
		System.out.println("getParams : " + person.getId() + " ," + person.getName());
	}

即可获取到参数,body里的参数会自动匹配到person的属性并赋值。

注意名字要与对象的属性变量名一致。否则获取不到参数,例如这里就不能在body里写成{“i”:1,“name”:“micro”},这样获取到person的id为null。

  • @RequestBody接收复杂对象数组

如果是复杂对象数组:

	@RequestMapping("test/test.do")
	@ResponseBody
	public void test(@RequestBody List<Person> personList) {
		for (Person p : personList) {
			System.out.println(p.getId() + " ," + p.getName());
		}
	}

请求方式如下,注意body里的格式是[]数组。

控制台打印:

1 ,micro

2 ,micro2

总结

即完成了@RequestBody接收各种类型的参数。

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringMVC@RequestBody自动转jsonHttp415错误的解决

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringMVC@RequestBody自动转jsonHttp415错误的解决

这篇文章主要介绍了SpringMVC@RequestBody自动转jsonHttp415错误的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-15

SpringMVC @RequestBody自动转json Http415错误如何解决

本篇内容介绍了“SpringMVC @RequestBody自动转json Http415错误如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学
2023-07-06

解决springmvc关于前台日期作为实体类对象参数类型转换错误的问题

页面报错:后台错误:Field error in object 'user' on field 'birthday': rejected value [2013-06-24]; codes [typeMismatch.user.birthd
2023-05-31

win8系统文字转换错误的解决方法

小编给大家分享一下win8系统文字转换错误的解决方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!win8系统关闭文字转换错误方法:1.右键选择系统自带输入法,进入设置界面。2.在打开的隐私设置界面中勾选以下选项复选框。3
2023-06-27

Win7摄像头驱动错误的解决方法

解决Win7摄像头驱动错误的方法如下:1. 检查设备管理器:按下Win + X键,在弹出的菜单中选择“设备管理器”。在设备管理器中,找到“摄像头”或“图像设备”类别,展开该类别。如果摄像头驱动出现黄色的感叹号或问号标志,说明驱动程序有问题。
2023-08-31

如何解决来自expect库的“不支持”错误

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《如何解决来自expect库的“不支持”错误》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!问题内
如何解决来自expect库的“不支持”错误
2024-04-05

PHP数组反转的常见错误及其解决方法

php 数组反转时常见的三个错误:1. 未使用 array notation,解决方法:使用数组符号明确将反转数组分配给新变量;2. 尝试反转关联数组,解决方法:先用 array_flip() 转换为简单数组再反转;3. 对空数组反转,解决
PHP数组反转的常见错误及其解决方法
2024-04-28

常见的Golang类型转换错误及其解决方案

Golang类型转换的常见错误及解决方法在使用Golang进行开发的过程中,类型转换无疑是一个经常遇到的问题。虽然Golang是一种静态类型的语言,但是在一些情况下我们仍然需要进行类型转换,比如从interface{}类型转换为具体的结构
常见的Golang类型转换错误及其解决方案
2024-02-25

springboot配置文件自动转译的坑怎么解决

本文小编为大家详细介绍“springboot配置文件自动转译的坑怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“springboot配置文件自动转译的坑怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
2023-06-29

Phpcms采集时出现编码转化错误的解决方法

phpcms在本地测试正常 传到虚拟主机上采集的时候出现这个错误   Warning: mb_convert_encoding() [function.mb-convert-encoding]: Unknown encoding &rdqu
2022-06-12

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录