SpringBoot教程(3):自定义fastjson解析+热部署

自定义fastjson解析

1. 创建简单的Springboot进行测试,建立一个无骨架的maven文件(无骨架:一路next下去),在pom.xml中添加:

<!--父节点 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
    <!--spring-boot-starter-web: MVC,AOP的依赖包....-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

2. 下载完成,咱们就可以去搭建工程了,当然为了测试,首先创建一个Controller,实例如下:

3.你会发现已经部署完成,直接点击运行,打开浏览器输入

http://localhost:8080

网页展示“hello world”表示搭建成功。

4.添加自定义fastjson解析json数据,pom.xml:

<dependency>
    <!--persistence-api: @Entity....-->
    <groupId>javax.persistence</groupId>
    <artifactId>persistence-api</artifactId>
    <version>1.0.2</version>
</dependency>

5.实体类:

@Entity
public class User {
    private int id;
    private String name;
    private int age;
    private Date creatTime;
    public User(int id, String name, int age, Date creatTime){
        //省略

}
   @Override
    public String toString() {
       //省略
    }
}

6.控制器:

@Controller
public class UserController {
    @RequestMapping("getData")
    @ResponseBody
    public User getData(){
        User user=new User(1,"张三",22,new Date());
        return user;
    }
}

7.启动类:

@SpringBootApplication
public class App {
    public static void main(String[] args){
        SpringApplication.run(App.class,args);
    }
}

8.项目结构如图:

9.运行App.java,打开浏览器输入:

http://localhost:8080/getData:

10.现在我们要将creatTime解析成“yyyy-MM-dd HH:mm:ss”格式,pom.xml:

<!--添加fastjson 依赖包.解析json数据-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.15</version>
</dependency>

11.第一种方式:使用@Bean注解。

@SpringBootApplication
public class App {
   @Bean
    public HttpMessageConverters fastJsonHttpMessageConverters() {
            // 1、需要先定义一个 convert 转换消息的对象;
            FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();

            //2、添加fastJson 的配置信息,比如:是否要格式化返回的json数据;
            FastJsonConfig fastJsonConfig = new FastJsonConfig();
            fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);

            //3、在convert中添加配置信息.
            fastConverter.setFastJsonConfig(fastJsonConfig);
            HttpMessageConverter<?> converter = fastConverter;
            return new HttpMessageConverters(converter);
        }
    public static void main(String[] args){
        SpringApplication.run(App.class,args);
    }

12.第二种方式:启动类继承WebMvcConfigurerAdapter类。

@SpringBootApplication
public class App extends WebMvcConfigurerAdapter {
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        super.configureMessageConverters(converters);

        // 1、需要先定义一个 convert 转换消息的对象;
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();

        //2、添加fastJson 的配置信息,比如:是否要格式化返回的json数据;
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(
                SerializerFeature.PrettyFormat
        );

        //3、在convert中添加配置信息.
        fastConverter.setFastJsonConfig(fastJsonConfig);
        //4、将convert添加到converters当中.
        converters.add(fastConverter);
    }

    public static void main(String[] args){
        SpringApplication.run(App.class,args);
    }

}

推荐第二种方式,因为如果碰到了乱码问题,第二种解决乱码更为便捷,添加如下代码即可:

List<MediaType> fastMediaTypes = new ArrayList<>();
fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
fastConverter.setSupportedMediaTypes(fastMediaTypes);

最后一定不要忘了在实体类中添加注解:

若不希望接口返回一个属性,则使用 @JSONField(serialize = false)。

热部署

在上述整个过程中,你会发现如果修改代码就需要重新运行App.java,这种方式在整个开发过程中是非常浪费时间的,所以这个时候就需要使用热部署来提高开发效率。

1.pom.xml:

<!-- 热部署,spring boot devtools 依赖包.底下还要构建节点 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
    <scope>true</scope>
</dependency>

2.构建节点:

<build>
    <!--添加Spring boot的插件-->
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
            </configuration>
        </plugin>
    </plugins>
</build>

3.Eclipse这样设置就OK了,但是IDEA还不行,这是因为当我们修改了代码之后,IDEA默认是不会进行自动编译的,而spring-boot-devtools又是监测到classpath下的文件发生变化才会重启应用,所以需要设置IDEA的自动编译:

1.CTRL+SHIFT+A-->查找make project automatically--> 选中。

2.CTRL+SHIFT+A-->查找Registry-->

compiler.automake.allow.when.app.running。

3.指定文件进行热部署。

源码:

github

https://github.com/southwind9801/springboot_hibernate01.git

https://github.com/southwind9801/springboot_mybais02.git

原文发布于微信公众号 - Java大联盟(javaunion)

原文发表时间:2018-06-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT笔记

SpringBoot开发案例之整合Dubbo提供者(二)

? 00.jpg 大家有没有注意到,上一篇中提供者,暴露接口的方式?混搭。springboot本身接口实现使用了注解的方式,而Dubbo暴露接口使用的是配置文...

3078
来自专栏dalaoyang

消息总线

SpringCloudBus:事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。 在上一...

29810
来自专栏Linyb极客之路

Spring Boot的@Configuration和自动配置有什么区别?

我们都知道springboot的这个原理@SpringBootApplication = @Configuration + @EnableAutoConfigu...

1182
来自专栏一个会写诗的程序员的博客

《Spring Boot 实战:从0到1》第2章 快速开始Hello World第2章 快速开始Hello World

大约20年前,程序员们使用“企业级Java Bean”(EJB)开发企业应用,需要配置复杂的XML。在二十世纪初期,新兴Java技术——Spring,横空出世。...

381
来自专栏码神联盟

碎片化 | 第四阶段-54-hibernate-spring整合流程-视频

如清晰度低,可转PC网页观看高清版本: http://v.qq.com/x/page/g0568hww5e2.html Spring+Hibernate整合 ...

34211
来自专栏玩转JavaEE

初识Spring Boot框架

按:最近公众号文章主要是整理一些老文章,主要是个人CSDN上的博客,也会穿插一些新的技术点。 ---- 前面的铺垫文章已经连着写了六篇了,主要是介绍了Sprin...

3555
来自专栏别先生

Hibernate之开门见山

1:SSH框架:   Struts2:基于mvc模式的应用层框架模式(Servlet层)   Hibernate:基于持久层的框架(数据访问层)   Sprin...

1807
来自专栏Java面试通关手册

结合Spring发送邮件的四种正确姿势,你知道几种?

测试使用的环境是企业主流的SSM 框架即 SpringMVC+Spring+Mybatis。为了节省时间,我直接使用的是我上次的“SSM项目中整合Echarts...

1123
来自专栏菩提树下的杨过

如何让jboss eap 6.2+ 的多个war应用共享 jar 包?

weblogic有一个很贴心的功能,允许把多个war应用共同依赖的jar包,打包一个单独的war,以libary方式部署,然后各应用在weblogic.xml里...

3197
来自专栏web编程技术分享

SpringMVC中的@Controller和@RequestMapping到底什么鬼?

2629

扫码关注云+社区