• 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
    });
    

      

  • 相关阅读:
    9.8 查找表
    LeetCode——Permutations
    利用rman自己主动备份转储spfile
    linux下非root用户怎样改动root权限的文件
    做一个有主见的女生
    APP-FND-00676: 弹性域例程 FDFGDC 无法读取为此说明性弹性域指定的默认引用字段
    矩阵高速幂模板篇
    Index statistics collected bug
    位运算
    poj 1190 生日蛋糕 , 强剪枝
  • 原文地址:https://www.cnblogs.com/hengzhou/p/9621332.html
Copyright © 2020-2023  润新知