SpringMVC @ResponseBody和@RequestBody使用

原创 2016年08月30日 17:01:52

@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 MVC中常用注解之@ResponseBody,@RequestBody,@PathVariable详解

一、Spring注解@ResponseBody,@RequestBody和HttpMessageConverter  Spring 3.X系列增加了新注解@ResponseBody,@Request...
  • linzhiqiang0316
  • linzhiqiang0316
  • 2016年08月26日 14:45
  • 1460

springMVC--requestBody和responseBody

requestBody和responseBody requestBody把前台页面传递的json格式数据强制转换成javabean responsebody在后台把javabean转换成json格式...
  • CSDN_GIA
  • CSDN_GIA
  • 2017年02月11日 15:10
  • 548

@ResponseBody和@RequestBody使用

本文主要介绍通过ajax提交表单后,@ResponseBody和@RequestBody的使用。
  • psp0001060
  • psp0001060
  • 2017年04月16日 10:24
  • 1105

SpringMVC@requestBody @responseBody配置要点

1.简介 @RequestBody 作用:  1) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把...
  • qq_33618717
  • qq_33618717
  • 2017年02月15日 17:09
  • 680

SpringMVC之@RequestMapping,@Responsebody与@RequestBody,以及@PathVariable简单介绍

预备知识:@RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。 @Reques...
  • u012768459
  • u012768459
  • 2016年10月12日 15:20
  • 3373

@RequestBody和@ResponseBody的简单使用

@RequestBody和@ResponseBody的使用
  • qq_16071145
  • qq_16071145
  • 2016年04月26日 20:45
  • 6971

Spring MVC之@RequestBody, @ResponseBody 详解

引言: 接上一篇文章讲述处理@RequestMapping的方法参数绑定之后,详细介绍下@RequestBody、@ResponseBody的具体用法和使用时机; 简介: @Requ...
  • kobejayandy
  • kobejayandy
  • 2013年10月14日 00:07
  • 301297

SpringMVC使用@RequestBody与@ResponseBody注解与前台进行json格式的数据

一、前端页面代码 姓名: 年龄: 家庭住址: 话费充值 二、页面JS代码 $(fun...
  • moxinglong
  • moxinglong
  • 2017年12月12日 14:58
  • 118

SpringMVC @RequestBody接收Json对象字符串 @ResponseBody处理json数据类型

地址:http://www.cnblogs.com/quanyongan/archive/2013/04/16/3024741.html      以前,一直以为在SpringMVC环境中,@R...
  • renxyz
  • renxyz
  • 2014年12月19日 11:34
  • 2046

SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(下)

配合@RequestBody注解,以及HTTP Request Header中的Content-Type属性,HTTP Request Body中包含的XML或者JSON数据可以自动被转换成对应的Ja...
  • fw0124
  • fw0124
  • 2015年09月09日 11:07
  • 9061
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SpringMVC @ResponseBody和@RequestBody使用
举报原因:
原因补充:

(最多只允许输入30个字)