@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使用的更多相关文章

  1. Spring MVC之@RequestParam @RequestBody @RequestHeader 等详

    Spring MVC之@RequestParam @RequestBody @RequestHeader 等详     引言: 接上一篇文章,对@RequestMapping进行地址映射讲解之后,该篇 ...

  2. 解决Spring MVC @ResponseBody返回中文字符串乱码问题

    spring mvc使用的默认处理字符串编码为ISO-8859-1 解决方法: 第一种方法: 对于需要返回字符串的方法添加注解,如下: @RequestMapping(value="/use ...

  3. Spring MVC @ResponseBody响应中文乱码

    问题:在前端通过get请求服务端返回String类型的服务时,会出现中文乱码问题 原因:由于spring默认对String类型的返回的编码采用的是 StringHttpMessageConverter ...

  4. Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解

    (转自:http://blog.csdn.net/walkerjong/article/details/7946109#) 引言: 接上一篇文章,对@RequestMapping进行地址映射讲解之后, ...

  5. 解决Spring MVC @ResponseBody返回html中中文字符串乱码问题

    最近有个应用,通过responsebody返回完整的html页面时出现乱码是异常的问题,因为是通过responsebody返回,所以一开始设置了text/plain的字符集,如下: <mvc:a ...

  6. Spring MVC @ResponseBody返回中文字符串乱码问题

    朋友做小项目练手的时候遇到的,着实让他郁闷够呛..这个问题的确很恶心.. 项目中引用的json包,直接用@ResponseBody注解返回json字符串..有关这个的乱码问题网上很多,各种花样各种转码 ...

  7. Spring注解@ResponseBody,@RequestBody

    @RequestBody 将HTTP请求正文转换为适合的HttpMessageConverter对象. @ResponseBody 将内容或对象作为 HTTP 响应正文返回,并调用适合HttpMess ...

  8. 解决Spring MVC @ResponseBody出现问号乱码问题

    原因是SpringMVC的@ResponseBody使用的默认处理字符串编码为ISO-8859-1,而我们前台或者客户端的编码一般是UTF-8或者GBK.现将解决方法分享如下! 第一种方法: 对于需要 ...

  9. 《转载》Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解

    引言: 接上一篇文章,对@RequestMapping进行地址映射讲解之后,该篇主要讲解request 数据到handler method 参数数据的绑定所用到的注解和什么情形下使用: 简介: han ...

随机推荐

  1. JAVA_返回一个数值的相反数的几种方式.

    一个方法接收一个int类型值,需要返回它的相反数. 如传入1,返回-1 传入-22,返回22 最简单的方式是return 0-number; 还有其他方式: public class Kata { p ...

  2. python 浮点数取绝对值

    import math print(math.fabs(-2.1)) print(math.fabs(-0.0)) print(math.fabs(10.1)) print(math.fabs(0.0 ...

  3. 学习gulpfile.babel.js随笔

    'use strict' import gulp from 'gulp' //将gulp插件包含进来 import sass from 'gulp-sass' //编译sass文件 import im ...

  4. 使用 for 循环

    for 循环通过迭代一个给定向量或列表,重复执行某个表达式.for 循环的语法是这样的:for (var in vector) {expr}var 遍历 vector 中的各个元素值,expr 被反复 ...

  5. maven3常用命令、java项目搭建、web项目搭建

    ------------------------------maven3常用命令--------------------------- 1.常用命令 1)创建一个Project mvn archety ...

  6. 动态规划-Predict the Winner

    2018-04-22 19:19:47 问题描述: Given an array of scores that are non-negative integers. Player 1 picks on ...

  7. FastJson/spring boot: json输出

    1.引入FastJson依赖包 <!-- FastJson --> <dependency> <groupId>com.alibaba</groupId> ...

  8. UVA-673 Parentheses Balance(栈)

    题目大意:给一个括号串,看是否匹配. 题目分析:一开始用区间DP写的,超时了... 注意:空串合法. 代码如下: # include<iostream> # include<cstd ...

  9. Android将图片保存到相册并及时看到

    Android中将图片保存到SD卡中,相册里不会及时出现这张图片,因为没有及时更新其索引,一般需要开机几次.当然我们可以手动更新其索引. 1,首先将文件保存到SD卡中. String filePath ...

  10. POJ 3984 迷宫问题 bfs 难度:0

    http://poj.org/problem?id=3984 典型的迷宫问题,记录最快到达某个点的是哪个点即可 #include <cstdio> #include <cstring ...