Spring MVC @ResponseBody和@RequestBody使用
@ResponseBody用法:
作用:该注解用于将Controller的方法返回的对象,根据HTTP Request Header的Accept的内容,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:
返回的数据不是html标签的页面,而是其他某种格式的数据时(如json,xml等)使用。
配置返回json和xml数据
添加jackson依赖
<dependence>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.1</version>
</dependence>
<dependence>
<groupId>com.fasterxml.jackson.core</groupId>
<artifacted>jackson-databind</srtifacted>
<version>2.8.1</version>
</dependence>
开启<mvc:annotation-driven>
java代码:
@RequestMapping("/testResponseBody")
public @ResponseBody Person testResponseBody() {
Person p = new Person();
p.setName("xiaohong");
p.setAge(12);
return p;
}
Person类:
@XmlRootElement(name="Person")
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Ajax代码:
$.ajax({
url:"testResponseBody",
type:'Get',
header: {
Accept:"application/xml" ,
},
success:function(data,testStatus){
console.log(data);
alert(data)
},
error:function(data,textStatus,errorThrown) {
console.log(data);
}
});
分析:
如果没有配置Person类的xml注解,那么只会json数据,无论Accept是什么。
如果配置了Person类的xml注解,那么如果Accept含有application/xml,就会返回xml数据,例如通过浏览器直接访问,浏览器的http request header appect字段一般都为Accept:text/html application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8,故返回XML数据。
改accept:“application/json”,即可返回json数据
用此注解或者ResponseEntity等类似类,会导致response header 含有accept-charset这个字段,而这个字段对于响应头是没有用的,以下方法可以关掉。
<mvc:annotation-driven>
<mvc:async-support default-timeout="3000/">
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8">
<property name="writeAcceptCharset" value="false">
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
@RequestBody使用:
作用:注解用于将controller的方法参数,根据HTTP Request Header的content-Type的内容,通过适当的HttpMessageConverter转换为java类
使用时机:
POST或者PUT的数据是JSON格式或者是JSON格式或者是XML格式,而不是普通的键值对形式
如何使用:
配置controller
@RequestMapping(value=“/testRequestBody”,method=RequestMethod.POST)
@ResponseBody
public Person testRequestBody(@RequestBody Person p) {
System.out.println("creating a employee:" + p);
return p;
}
Ajax代码如下:
$.ajax({
url:"testResponseBody",
data:{"name":"小红","age":"123"}, // json形式要用双引号
content
});
Spring MVC @ResponseBody和@RequestBody使用的更多相关文章
- Spring MVC之@RequestParam @RequestBody @RequestHeader 等详
Spring MVC之@RequestParam @RequestBody @RequestHeader 等详 引言: 接上一篇文章,对@RequestMapping进行地址映射讲解之后,该篇 ...
- 解决Spring MVC @ResponseBody返回中文字符串乱码问题
spring mvc使用的默认处理字符串编码为ISO-8859-1 解决方法: 第一种方法: 对于需要返回字符串的方法添加注解,如下: @RequestMapping(value="/use ...
- Spring MVC @ResponseBody响应中文乱码
问题:在前端通过get请求服务端返回String类型的服务时,会出现中文乱码问题 原因:由于spring默认对String类型的返回的编码采用的是 StringHttpMessageConverter ...
- Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
(转自:http://blog.csdn.net/walkerjong/article/details/7946109#) 引言: 接上一篇文章,对@RequestMapping进行地址映射讲解之后, ...
- 解决Spring MVC @ResponseBody返回html中中文字符串乱码问题
最近有个应用,通过responsebody返回完整的html页面时出现乱码是异常的问题,因为是通过responsebody返回,所以一开始设置了text/plain的字符集,如下: <mvc:a ...
- Spring MVC @ResponseBody返回中文字符串乱码问题
朋友做小项目练手的时候遇到的,着实让他郁闷够呛..这个问题的确很恶心.. 项目中引用的json包,直接用@ResponseBody注解返回json字符串..有关这个的乱码问题网上很多,各种花样各种转码 ...
- Spring注解@ResponseBody,@RequestBody
@RequestBody 将HTTP请求正文转换为适合的HttpMessageConverter对象. @ResponseBody 将内容或对象作为 HTTP 响应正文返回,并调用适合HttpMess ...
- 解决Spring MVC @ResponseBody出现问号乱码问题
原因是SpringMVC的@ResponseBody使用的默认处理字符串编码为ISO-8859-1,而我们前台或者客户端的编码一般是UTF-8或者GBK.现将解决方法分享如下! 第一种方法: 对于需要 ...
- 《转载》Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
引言: 接上一篇文章,对@RequestMapping进行地址映射讲解之后,该篇主要讲解request 数据到handler method 参数数据的绑定所用到的注解和什么情形下使用: 简介: han ...
随机推荐
- Java堆(heap)、栈(stack)和队列的区别
Java里面Stack有两种含义: 一:数据结构 Stack,即java.util.Stack import java.util.Stack; import java.util.Iterator; i ...
- Spring Boot与数据
SpringBoot 着眼于JavaEE! 不仅仅局限于 Mybatis .JDBC. Spring Data JPA Spring Data 项目的目的是为了简化构建基于 Spring 框架应用的数 ...
- shell 变量赋值运算
.变量赋值: name=lbg 等号前后不能有空格 name="Lebron James" 变量值中有空格要用双引号 echo ${name} 用${}更保险 shopt -s - ...
- 使用 if 表达式
由于 if 本质上是一个原函数,它的返回值就是满足条件分支表达式的值,因此,if 表达式也可以用作内联函数.我们以 check_positive( )为例进行说明.尽管条件表达式中不另写 return ...
- 这是一份很详细的 Retrofit 2.0 使用教程(含实例讲解)
前言 在Andrroid开发中,网络请求十分常用 而在Android网络请求库中,Retrofit是当下最热的一个网络请求库 今天,我将献上一份非常详细Retrofit v2.0的使用教程,希望你们会 ...
- 解决点击tomcat的startup.bat一闪而过的问题
问题: 点击startup.bat一闪而过,经过网上查询,原来是没有配置JAVA_HOME,配置一下就可以了 原因: tomcat在启动时,会读取环境变量的信息,需要一个CATALINA_HOME 与 ...
- Spring Boot 整合Swagger2构建API文档
1.pom.xml中引入依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>spri ...
- Linux终端界面屏保
Linux终端界面屏保 在很多Linux使用者的认知里,都认为终端下的Linux操作界面是没有屏保的,只有像windows那样的图形界面下才有屏保.但是其实Linux下也是有屏保的,只不过是ASC ...
- 控制反转(IOC)模式
控制反转(Inversion of Control):提倡实现松耦合层.组件和类的设计原则,颠倒程序的控制流程.IoC使用分离执行特定问题处理代码的概念: IoC意味着将你设计好的对象交给容器控制,而 ...
- mysqlbinlog初识
mysql-binlog->解析mysql的binlog日志 mysql的binlog日志是什么? 数据目录下的日下文件就是mysql的binlog日志 mysql-bin.00001 mysq ...