zoukankan      html  css  js  c++  java
  • Spring Cloud微服务实战 打造企业级优惠券系统 3-10 SpringBoot Jackson的使用技巧

    0    课程地址

    http://coding.imooc.com/lesson/380.html#mid=28361

    1    浓缩精华
    1.1  jackson通用类配置,见4.1
    1.2  jackson其他配置

    https://www.cnblogs.com/1446358788-qq/p/13976247.html

    1.3  JackSon中的多个ObjectMapper的设置

    这其实不是 Jackson 的问题,而是对 Spring IOC 的理解,ObjectMapper 肯定是可以定义多个的,但是,你在注入的时候需要指定好注入的是哪一个,否则,就会出现你说的这个报错了。

    可以看看 @Autowired、@Resource、@Primary 这些注解的特性和含义。

    1.4  @Configuation总结

     @Configuation等价于<Beans></Beans>

     @Bean等价于<Bean></Bean>

    参见:https://blog.csdn.net/u014199143/article/details/80692685

    1.5  jdk与lombok版本对应

    https://projectlombok.org/changelog

    https://www.cnblogs.com/1446358788-qq/articles/14615938.html

    2    个人关注
    2.1  jdk8的lambda表达式和lombok的builder方法的却别和关联是什么?

    这个暂时没找到答案,看jdk8视频的时候搞一下

    3    课程内容
    4    代码演练
    4.1  jackson通用类配置(如果同一种模式,配置一次,所有使用jackson案例都可以使用)

    bean类

    package com.imooc.springboot.application.vo;
    
    import com.fasterxml.jackson.annotation.JsonFormat;
    import com.fasterxml.jackson.annotation.JsonIgnore;
    import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import lombok.AllArgsConstructor;
    import lombok.Builder;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.extern.slf4j.Slf4j;
    
    import java.util.Date;
    import java.util.logging.SimpleFormatter;
    
    /**
     * IMoocer
     *
     * @author 魏豆豆
     * @date 2021/4/4
     */
    @Data//getset和toString方法
    @Builder//buil方法,参见Controller层的调用
    @NoArgsConstructor//无参构造方法
    @AllArgsConstructor//全参构造器
    @JsonIgnoreProperties({"address"})
    public class IMoocer {
    
        @JsonProperty("name")//别名,传值后key值变为name
        private String userName;
    
        private String age;
        //@JsonIgnore
        private String address;
    
        //记下
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date birthday;
    }

    配置类:

    package com.imooc.springboot.application.config;
    
    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import java.text.SimpleDateFormat;
    
    /**
     * JacksonConfig
     *
     * @author 魏豆豆
     * @date 2021/4/4
     */
    @Configuration
    public class JacksonConfig {
    
        @Bean
        public ObjectMapper buildJackson(){
            ObjectMapper objectMapper = new ObjectMapper();
            //记一下 初始化objectMapper,公共配置类,初始化日期的格式(JacksonConfig 是作用于全局的)。
            objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
            //属性为null,不参与序列化
            objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
            return objectMapper;
        }
    }

    调用Controller类

    package com.imooc.springboot.application.controller;
    
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.imooc.springboot.application.config.SpringBootConfig;
    import com.imooc.springboot.application.vo.IMoocer;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import java.io.IOException;
    import java.util.Date;
    
    /**
     * UserController
     *
     * @author 魏豆豆
     * @date 2021/3/13
     */
    @RequestMapping("/userController")  //注解可以将HTTP请求映射给controller来处理,包括返回视图页面的controller和Rest服务的controller。
    @ResponseBody   //@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。
    @Controller//@Controller标识的类,该类代表控制器类(控制层/表现层)。这里控制层里面的每个方法,都可以去调用@Service标识的类(业务逻辑层),@Service标识的类中的方法可以继续调用@Resposity标识的接口实现类(Dao层/持久层)。
    @Slf4j
    public class UserController {
        @Value("${com.imooc.userid}")
        private String userid;
        @Value("${com.imooc.username}")
        private String username;
    
        @Autowired//自动注入Compenent组件
        private SpringBootConfig springBootConfig;
    
        /**
         * 使用构造方法
         */
        @Autowired
        private ObjectMapper objectMapper;
        /**
         *  访问地址:127.0.0.1:8081/imooc/userController/testInjectOne
         */
        @GetMapping("/testInjectOne")
        public void testConfigInjectOne(){
    /*        System.out.println("userid="+this.userid);
            System.out.println("username="+this.username);*/
            log.info("userid="+this.userid);
            log.info("username="+this.username);
    
        }
        /**
         *  访问地址:127.0.0.1:8081/imooc/userController/testInjectTwo
         */
        @GetMapping("/testInjectTwo")
        public void testConfigInjectTwo(){
            log.info("userid="+springBootConfig.getUserid());
            log.info("username="+springBootConfig.getUsername());
        }
    
        /**
         *  访问地址:127.0.0.1:8081/imooc/userController/testJackson
         *  测试jackson序列化和反序列化
         */
        @GetMapping("/testJackson")
        public IMoocer testJackson() throws IOException {
            //记一下build方法
            IMoocer iMoocer = IMoocer.builder()
                    .userName("小魏")
                    .age("18")
                    .address("北京")
                    .birthday(new Date())
                    .build();
    
            //记一下 序列化 方法
            String sJsonString = objectMapper.writeValueAsString(iMoocer);
            log.info("序列化方法:=============="+sJsonString);
    
            //反序列化
            IMoocer iMoocer1 = objectMapper.readValue(sJsonString,IMoocer.class);
            return iMoocer1;
        }
    
    }

    postman访问

    打印日志:

    2021-04-04 11:46:56.602  INFO 6068 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/imooc]  : Initializing Spring DispatcherServlet 'dispatcherServlet'
    2021-04-04 11:46:56.602  INFO 6068 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
    2021-04-04 11:46:56.647  INFO 6068 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 44 ms
    2021-04-04 11:46:56.968  INFO 6068 --- [nio-8081-exec-1] c.i.s.a.controller.UserController        : 序列化方法:=============={"age":"18","birthday":"2021-04-04 03:46:56","name":"小魏"}
    诸葛
  • 相关阅读:
    rn相关文档
    《浅谈我眼中的express、koa和koa2》好文留存+笔记
    (四)Spring 对DAO 的支持
    (三)Spring 之AOP 详解
    (二)Spring 之IOC 详解
    SVN文件上感叹号、加号、问号等图标的原因
    Windows平台下不同版本SVN对比
    eclipse中启动Genymotion模拟器的错误
    (一)问候Spring4
    (十一)Hibernate 高级配置
  • 原文地址:https://www.cnblogs.com/1446358788-qq/p/14296102.html
Copyright © 2011-2022 走看看