zoukankan      html  css  js  c++  java
  • SpringBoot(五)——JSON相关知识

    以往以JSON格式返回只需要在控制器方法上加上@RequestMapping就可以了,记录其他3个知识点

    1.常规情况下对于属性值为null的转换为空字符

    直接手写一个配置类Jackson,套模板,不用加乱七八糟的依赖包

    import com.fasterxml.jackson.core.JsonGenerator;
    import com.fasterxml.jackson.databind.JsonSerializer;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.SerializerProvider;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
    
    import java.io.IOException;
    
    @Configuration
    public class Jackson {
    
        @Bean
        @Primary
        @ConditionalOnMissingBean(ObjectMapper.class)
        public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
            ObjectMapper objectMapper;
            objectMapper = builder.createXmlMapper(false).build();
            objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
                @Override
                public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
                    jsonGenerator.writeString("");
                }
            });
            return objectMapper;
        }
    }

    然后对于控制器类中的方法就可以直接显示

    2.JSONObject类的使用

    (1)导入依赖包

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.35</version>
            </dependency>

    (2)语法

    在返回json格式上没什么用,常规的也可以,主要是用来把toString方法转化为json格式的字符串,以json格式处理null,上面的模板也是够用的

        @RequestMapping("/json4")
        public JSONObject json4(){
            JSONObject person4=new JSONObject();//原生JSONObject对象,和map差不多,只会显示设置的key
            person4.put("age",22);
            person4.put("hobbies",new String[] {"乒乓","骑行"});
            System.out.println(person4);
            return person4;
        }
    
        @RequestMapping("/json5")
        public Person json5(){//实体类转为JSONObject
            Person person5=new Person();
            person5.setAge(22);
            person5.setName("霸王别鸡");
            person5.setHobbies(new String[]{"王者荣耀","羽毛球"});
            System.out.println(person5);
            System.out.println(JSONObject.toJSON(person5));
            System.out.println(JSONObject.toJSONString(person5));
            return person5;
        }
    
        @RequestMapping("/json6")
        public JSONObject json6(){
            HashMap<String,Object> map=new HashMap<>();//通过Map生成JSONObject
            map.put("name","灰太狼");
            map.put("age",21);
            map.put("student",false);
            map.put("hobbies",new String[]{"发明","抓羊"});
            System.out.println(JSONObject.toJSON(map));
            return (JSONObject) JSONObject.toJSON(map);
        }
    
        @RequestMapping("json7")
        public JSONObject json7(){
            String string="{ "name":"Mike","age":22 }";//通过字符串生成JSONObject
            //String string="{ "name":,,:"Mike","age":22 ,,,}";//乱来的话运行会报错
            JSONObject jsonObject=JSONObject.parseObject(string);
            return jsonObject;
    
        }
        @RequestMapping("/json8")
        public JSON json8(){
            ArrayList<Person> list=new ArrayList<Person>();//试一下JSON对象,一般都是用JSONObject的
            list.add(person);
            Person person8=new Person();
            person.setName("person8");
            list.add(person8);
            JSON json= (JSON) JSON.toJSON(list);
            System.out.println(json);
            return json;
        }
    
        @RequestMapping("/json9")
        public JSONArray json9(){
            JSONArray jsonArray = new JSONArray();//测一下JSONArray
            JSONObject jsonObject1 = new JSONObject();
            jsonObject1.put("name","守林鸟");
            JSONObject jsonObject2 = new JSONObject();
            jsonObject2.put("name","灰太狼");
            jsonArray.add(jsonObject1);
            jsonArray.add(jsonObject2);
            System.out.println(jsonArray);
            return jsonArray;
        }

    3.自行封装统一返回的数据结构

    就是下面这个东西

    自定义一个定义一个类JsonResult

    import lombok.Data;
    
    @Data
    public class JsonResult<T> {
        private T data;
        private String code;
        private String msg;
    
        public JsonResult() {
            this.code = "10086";
            this.msg = "没有返回的数据";
        }
    
        public JsonResult(T data) {
            this.data = data;
            this.code = "200";
            this.msg = "有数据返回";
        }
    }

    测试方法

        @RequestMapping("/json10")
        public JsonResult<Person> json10(){
            return new JsonResult<>();
        }
    
        @RequestMapping("/json11")
        public JsonResult<Person> json11(){
            return new JsonResult<>(null);
        }
    
        @RequestMapping("/json12")
        public JsonResult<Person> json12(){
            Person person12 = new Person();
            person12.setName("person12");
            return new JsonResult<>(person12);
        }

    这里保留了上述处理null的Jackson类。


    参考&引用

    https://blog.csdn.net/taojin12/article/details/88244907

  • 相关阅读:
    阿里云弹性计算研发团队如何从0到1自建SRE体系
    开创云端时空智能,千寻位置加速三维实景中国建设
    实时复制真实世界,51World用云上数字孪生变革产业
    阿里云弹性计算性能测试负责人三年实战复盘 | 性能测试没那么简单
    阿里技术实战:一些云上资源调度的经验谈
    阿里云第七代云服务器,引领IaaS市场四大趋势
    最新干货!如何深入集群调度与管理?
    E2E性能再攀高峰、安全再加码,阿里云第七代ECS云服务器正式进入公测阶段
    centos7装linux翻译软件
    MySql 5.7中添加用户,新建数据库,用户授权,删除用户,修改密码
  • 原文地址:https://www.cnblogs.com/shoulinniao/p/13404238.html
Copyright © 2011-2022 走看看