• SpringMVC 之 @ResponseBody 和 @RequestBody


    前后端进行数据交互的时候,规定数据交互的格式,使数据交互规范而统一,是极为重要的事。一般而言,我们会采用 JSON 进行数据交互。本文暂不讨论如何 JSON 的格式规范,而是解析一下如何在 SpringMVC 中方便快捷的使用 JSON 进行数据交互。那就是使用两大注解: @ResponseBody 和 @RequestBody 。

    pom.xml

    我采用 Maven 来管理构建项目,要使用 @ResponseBody 和 @RequestBody ,要先在 pom.xml 里引入 jackson 依赖包。

        <!--JSON交互-->
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
          <version>2.5.2</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.5.2</version>
        </dependency>

    额,至于 SpringMVC 具体使用哪个版本就需要你自己选择了。

    开启 < mvc:annotation-driven />

    为什么要开启 < mvc:annotation-driven /> ?
    相当于注册了 DefaultAnnotationHandlerMapping 和 AnnotationMethodHandlerAdapter 两个 bean ,配置一些 messageconverter 。即解决了 @Controller 注解的使用前提配置。而我们在使用 SpringMVC 时,一定会用到 @Controller 注解,如果没有 < mvc:annotation-driven/> ,那么所有的 Controller 可能就没有解析。

    Java 代码示例

    实体类:

    public class User {
        private String name;
        private int id;
        public String getName() { return name;}
        public void setName(String name) { this.name = name;}
        public int getId() { return id;}
        public void setId(int id) { this.id = id;}
    }

    Controller:

    @Controller
    @RequestMapping("/json")
    public class Controller {
    
        //仅发送 JSON ,即仅使用 @ResponseBody 注解
        @RequestMapping("/justResponse")
        @ResponseBody
        public Map<String, Object> justResponse(Model model) throws Exception {
            Map<String, Object> map =new HashMap<String, Object>();
            User user = new User();
            user.setName("Test");
            user.setId(123);
            map.put("string", "string");
            map.put("user", user);
            return map;
        }
    
        //仅接收 JSON ,即仅使用 @RequestBody注解
        @RequestMapping("/justRequest")
        public User justRequest(@RequestBody User user) throws Exception {
            System.out.println("This is " + user.name);
            return user;
        }
    
        //收发 JSON ,即使用 @ResponseBody 和 @RequestBody
        @RequestMapping("/responseAndRequest")
        @ResponseBody
        public Map<String, Object> responseAndRequest(@RequestBody User user) throws Exception {
            System.out.println("This is " + user.name);
            Map<String, Object> map =new HashMap<String, Object>();
            map.put("string", "string");
            map.put("user", user);
            return map;
        }
    }

    之所以会有 Map< String, Object > ,是因为数据交互时会存在多个对象,这样可能更贴合实际。以及还有一点,确保数据格式为 JSON ,不过使用 XML 也可以,以上两个注解也支持 XML 。

  • 相关阅读:
    zookeeper记录2(选举模式和ZooKeeper的集群安装)
    端口复用技术简单了解;重用端口;socket复用端口
    java线程池如何合理配置核心线程数?(转)
    数据库锁机制(转)
    mysql左连接锁表_不得不会的mysql锁(转)
    POI: calculated end index (4361) is out of allowable range (4339..4358)
    jdbcTemplate事务管理
    springboot 访问静态资源
    springboot集成持久化框架
    第六章 FreeBSD之配置日期和时间
  • 原文地址:https://www.cnblogs.com/Sherlock-J/p/12925983.html
Copyright © 2020-2023  润新知