自定义fastjson解析+热部署

Posted Java大联盟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义fastjson解析+热部署相关的知识,希望对你有一定的参考价值。


Java大联盟

致力于最高效的Java学习

自定义fastjson解析+热部署  自定义fastjson解析+热部署


自定义fastjson解析+热部署


今天给大家分享一篇Demi的原创教程,非常感谢这位集美貌与才华于一身的程序猿小姐姐,此处掌声应该再热烈一些。


废话不多说,直接上干货。


自定义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,实例如下:


自定义fastjson解析+热部署


自定义fastjson解析+热部署


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.项目结构如图:


自定义fastjson解析+热部署


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

http://localhost:8080/getData:


自定义fastjson解析+热部署


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);


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


自定义fastjson解析+热部署


若不希望接口返回一个属性,则使用 @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.指定文件进行热部署。



自定义fastjson解析+热部署


源码:


github

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

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



自定义fastjson解析+热部署

















专业 热爱 专注

致力于最高效的Java学习

Java大联盟



以上是关于自定义fastjson解析+热部署的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot配置文件(热部署Properties和YAML自定义属性对象集合)

ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

接了个变态需求:给定一个接口,要用户自定义动态实现并上传热部署,怎么搞?

React Native for Android 热部署图片自己定义方案

FastJson_exc1

动态上传jar包热部署实战