zoukankan      html  css  js  c++  java
  • @RequestBody 处理类型 和 对象 和 json 相互转换

    1 @RequestBody 处理类型

    在项目中经常看到controller 中有 @RequestBody 字样,他到底有什么作用?

    一般使用表单提交数据时不需要使用@RequestBody 即可自动封装数据到对应的 Bean 中。@RequestBody 用来处理Content-Type: application/json, application/xml等

    它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。

    说明:使用 @RequestBody 解析数据需要添加 jackson 或 fastjson 依赖包。

    maven 引入 fastjson 包

    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.51</version>
    </dependency>

    2 对象 和 json 相互转换

    在项目中经常会遇到对象和 json 之间相互转换,公共类 和 json 对象转换, 静态内部类 和 json 对象转换

    2.1 没有内部类时 Student 类

    @Data
    public class Student {
    
        private String id;
        private String name;
        private int age;
        private String sex;
    @Override
        public String toString() {
            return ToStringBuilder.reflectionToString(this);
        }
    }

    json 和 对象 相互转换

    public static void main(String[] args) throws IOException {
            ObjectMapper mapper = new ObjectMapper();
    
            Student student = new Student();
            student.setName("good");
    
    
            String s = mapper.writeValueAsString(student);
            System.out.println(s);
    
            Student hd2 = mapper.readValue(s, Student.class);
            System.out.println(hd2);
    
    
        }

    2.2 有静态内部类时 Student 类

    @Data
    public class Student {
    
        private String id;
        private String name;
        private int age;
        private String sex;
        private HomeData homeData;
        private BigDecimal salary;
        private String[] tel;
    
        @Override
        public String toString() {
            return ToStringBuilder.reflectionToString(this);
        }
    
        @Data
        public static class HomeData{
            private Address address;
    
            @Override
            public String toString() {
                return ToStringBuilder.reflectionToString(this);
            }
    
            @Data
            public static class Address {
    
                private String country;
                private String city;
    
                @Override
                public String toString() {
                    return ToStringBuilder.reflectionToString(this);
                }
            }
        }
    }

    json 和 对象 之间相互转换

    public static void main(String[] args) throws IOException {
            ObjectMapper mapper = new ObjectMapper();
    
            Student student = new Student();
    
            Student.HomeData homeData = new Student.HomeData();
            Student.HomeData.Address address = new Student.HomeData.Address();
            address.setCountry("中国");
            address.setCity("上海");
            homeData.setAddress(address);
            student.setHomeData(homeData);
    
            String s = mapper.writeValueAsString(address);
            System.out.println(s);
    
            Student.HomeData.Address hd2 = mapper.readValue(s, Student.HomeData.Address.class);
            System.out.println(hd2);
    
    
        }

    说明:主要方法有 mapper.writeValueAsString 和 mapper.readValue

  • 相关阅读:
    iOS开发中TableView的嵌套使用
    iOS弹出View同时使背影变暗
    APNs消息推送完整讲解
    oc学习之路----APNS消息推送从证书到代码(2015年4月26号亲试可用)
    oc学习之路----application.keyWindow.rootViewController与self.window.rootViewController与[self.window makeKeyAndVisible];小发现
    oc学习之路----application.keyWindow.rootViewController与self.window.rootViewController与[self.window makeKeyAndVisible];小发现
    数据库设计原则
    oc学习之路----QQ聊天界面
    oc学习之路----代理模式2-使用步骤
    oc学习之路----通过代码自定义cell
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/8266988.html
Copyright © 2011-2022 走看看