@ResponseBody用法

作用:

  • 该注解用于将Controller的方法返回的对象,根据HTTP Request Header的Accept的内容,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

使用时机:

  • 返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用.

配置返回JSON和XML数据

  • 添加jackson依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.1</version>
</dependency>
  • 开启<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; }
@XmlElement
public void setAge(int age) { this.age = age; }
}
  • Ajax代码
$.ajax({
url: "testResponseBody",
type: 'GET',
headers: {
Accept: "application/xml",
// Accept:"application/json",
},
success: function(data, textStatus){
console.log(data);
alert(data);
},
error: function (data, textStatus, errorThrown) {
console.log(data);
},
});

分析

  • 如果没有配置Person类的XML注解,那么只会JSON数据,无论Accept是什么,

  • 如果配置了Person类的xml注解,那么如果Accept含有applicatin/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"/>
<!-- utf-8编码 -->
<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格式或者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: "testRequestBody",
data: '{"name":"小红","age":12}', //要用双引号!!
contentType: "application/json;charset=utf-8", // 因为上面是JSON数据 type: "POST",
headers: {
// Accept: "application/xml",
Accept: "application/json",
},
success: function(data, textStatus){
console.log(data);
alert(data);
},
error: function (data, textStatus, errorThrown) {
console.log(data);
},
});

xml类似.

总结

推荐阅读

解析Spring中的ResponseBody和RequestBody

最新文章

  1. 使用swagger作为restful api的doc文档生成
  2. PHP ElasticSearch的使用
  3. 开源(免费)三维 GIS(地形,游戏)
  4. zoj1530 bfs
  5. coreData旧版本增加字段,新版本是否可以继续使用旧版本内容的测试(MagicalRecord的使用)
  6. C#POP3协议实现SSL验证登陆GMAIL
  7. 【转】windows消息16进制对应表
  8. [c#]控制台进度条的示例
  9. ASP.NET自定义控件组件开发 第一章 待续
  10. Java 之JavaBean 、EJB 和POJO
  11. C++ 虚基类表指针字节对齐
  12. CBC翻转攻击(实验吧_简单的登陆题)
  13. JavaOOP笔记
  14. abaqus的umat在vs中debug调试
  15. Codeforces Round #423 Div. 1
  16. Windows打开文件
  17. windows下安装cygwin及配置(转)
  18. python数据分析基础——numpy和matplotlib
  19. python常用命令—windows终端查看安装包信息
  20. css tips —— 可见性对图片加载的影响

热门文章

  1. java gc --- 关键词解释
  2. 牛客网 牛客小白月赛1 F.三视图
  3. Jumpserver0.5使用说明
  4. winform Loading效果
  5. EasyMvc入门教程-基本控件说明(2)定时器
  6. fastjson的常用用法以及自定义排序
  7. C++ 关于类与对象在虚函数表上唯一性问题 浅析
  8. unity3D中使用Socket进行数据通信(一)
  9. LeetCode Recover Binary Search Tree——二查搜索树中两个节点错误
  10. 使用matlab进行mex编译时的路径问题mexopts