• @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

  • 相关阅读:
    freeebsd,pkg_add,svsup,make改服务器的设定
    采用dhcp的Failover协议实施dhcp的热备份
    FreeBSD断电后,自动检测并修复文件系统
    WinXP、Win7脚本自动加域及用户资料迁移
    支除桌面右键显卡控制面板
    BSD平台中整合samba与win2003 AD
    企业Windows Server 2008活动目录备份和灾难恢复详解
    FreeBSD 6.2 上使用 PF 防火墙
    部署到服务器后,导出Excel发生错误Retrieving the COM class factory for component with CLSID {0002450000000000C000000000000046}
    Jquery1.6版本以上调用WebService
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/8266988.html
Copyright © 2020-2023  润新知