fastjson

SpringMVC日期格式属性自动转成时间戳实现源码分析

穿精又带淫゛_ 提交于 2020-08-11 09:11:11
背景介绍 SpringMVC搭建的微服务系统,后端数据库对时间类型的存储使用的是Long类型,而前端框架倾向于使用yyyy-MM-dd HH:mm:ss这种标准显示格式,前端JSON格式的请求报文与后台的接口交互都需要进行格式转换,这部分转换功能由后台实现。 使用时我们发现,前端定义的JSON请求,时间格式为yyyy-MM-dd HH:mm:ss,如果后台定义的POJO相应的属性为Long类型,可以自动转换为时间戳,对此非常好奇,框架是如何实现这一功能的? 框架选型、版本及主要功能 spring boot 2.1.6.RELEASE spring cloud Greenwich.SR3 alibaba fastjson 1.2.60 注意json框架使用的是fastjson 代码演示 为了方便演示,定义一个特别简单的POJO类: public class DateReq { private String dateFormat; private Long timestamp; // 省略getter/setter/toString方法 } 再定义一个简单的Controller方法: @RestController public class DemoController { @PostMapping(value = "/json/demo/info") public

文件路径转化json格式的数据设计思想和源码

北战南征 提交于 2020-08-11 04:33:01
本人是一个大三的学生,这个暑假老师给了一个任务,其中有个需求就是将hadoop上的文件树显示到web页面上,这就需要将形如 /project2/a/b 这样的路径转化为如下的格式: [ { "text" : "project2" , "children" : [ { "text" : "a" , "children" : [ { "text" : "b" } ] } ] } ] 有了数据后直接交给easyui的tree组件渲染,然后生成目录结构: 但是刚开始做的时候,对于如何把路径转化为json,我不会做,也想偷个懒,于是就去网上找现成的代码,最终在本站找到一个老哥的代码: java 字符串路径集合转换成带有层次结构的JSON 使用他的代码确实可以达到目的,但是后期发现,当目录的层数达到8个以上,程序就会卡死,根据我调试结果来看,貌似是进入了递归死循环(爆栈),因此不得不放弃,还是打算自己写一个方法。 设计思路 我放弃了使用递归的方式。 文件的路径,其实就是树的结构。我们可以从叶子节点,一级一级的往上溯源,从而达到目的,这样做的好处是: 不必考虑孩子节点,只需要考虑双亲节点即可 。如果从根节点往下,那么对于分支节点就需要考虑双亲和孩子。 节点的形式: text level parent id pid children 对应的实体类: @Data

Springboot集成flowable modeler 免登录,并且查询用户/用户组改为自己系统数据

时光总嘲笑我的痴心妄想 提交于 2020-08-10 19:55:55
之前画流程图都是用tomcat启动flowable modeler,但是这样启动就不能在分配任务用户/用户组的时候查询自己系统里的数据。所以现在需要把flowable modeler集成到项目里来。 之前自己也搜索了很多文章,都感觉不是很清晰,可能也是因为我刚接触不久。现在自己集成好了之后,记录一下自己学习的结果。 首先需要创建一个springboot应用,pom文件中引入相关jar包: <properties> <java.version>1.8</java.version> <flowable.version>6.4.1</flowable.version> <lombok.version>1.18.0</lombok.version> <fastjson.version>1.2.9</fastjson.version> </properties> < dependencyManagement > < dependencies > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-dependencies </ artifactId > < type > pom </ type > < scope > import </ scope > </

springboot application.yml配置学习

≡放荡痞女 提交于 2020-08-10 17:01:58
一、背景 为了更好的使用springboot,所以看一下application.yml配置这块。主要是看数据绑定这块。 主要参考:https://www.hangge.com/blog/cache/detail_2459.html 二、项目主要内容 1、controller package com.shuimutong.learn.springboot.yml.controller; import com.alibaba.fastjson.JSON; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @RestController public class HelloController { @GetMapping( "/hello2" ) public String hello2() { return "Hello, Jack!" ; } } 2、启动类 package com.shuimutong

Dubbo2.7.7 反序列化漏洞绕过分析

陌路散爱 提交于 2020-08-10 16:50:50
作者:freddychi(迟长峰)@腾讯安全云鼎实验室 公众号: https://mp.weixin.qq.com/s/jKM-Z2BTFfk_Ro1rJAxg5w 北京时间2020-6-22日Apache官方发布了Dubbo 2.7.7版本,其中修复了一个严重的远程代码执行漏洞(CVE-2020-1948),这个漏洞是由腾讯安全玄武实验室的ruilin提交,该漏洞允许攻击者使用任意的服务名和方法名发送RPC请求,同时将恶意序列化参数作为有效载荷,当恶意序列化的参数被反序列化时将执行恶意代码。该漏洞与 CVE-2017-3241 RMI反序列化漏洞有点类似,都是在远程调用过程中通过方法参数传入恶意序列化对象,服务端在解析参数进行反序列化时触发。Dubbo Github Star数量32.8k,知名度不亚于fastjson,被大量企业使用,包括一些知名互联公司,漏洞影响十分广泛。 补丁分析 从补丁对比文件来看,在DecodeableRpcInvocation.java文件133-135行增加了对Method方法进行验证,如果验证不通过则抛出非法参数异常终止程序运行,核心代码代码如下: if (!RpcUtils.isGenericCall(path, this.getMethodName()) && !RpcUtils.isEcho(path, this.getMethodName(

上线前一个小时,dubbo这个问题可把我折腾惨了

扶醉桌前 提交于 2020-08-10 06:51:35
前因 那是一个月黑风高的夜晚,不管有没有圆圆的月亮,都无法解救要加班的我。这就是苦涩的人生啊! 那天正好是春节回家的日子,定了晚上的票,然后还是上线的日子。 测试在做回归测试的时候,发现一个老功能报错了,什么鬼,都没改过那块代码怎么会出问题?案件疑点重重呀。。。 为了能够早点上线,早点回家,所以这个 Bug 就显得十万火急了,因为就这一个问题,其他都没问题,解决好了就可以上线了,于是开启了破案之路。 第一步:找到错误信息 机智的我在第一时间打开了 Cat 查看具体的错误,由于当时并没有想到去写一篇文章出来,错误信息也就没有截图,后面通过模拟的操作,得到了类似的一样的错误信息如下: Cat错误信息 居然是类转换错误,点进去查看详细的错误信息,如下图: Cat错误详情 真正有价值的错误信息如下: dubbo version: 2 .7 .3, current host: 192 .168 .8 .224 java .lang .ClassCastException: java .util .HashMap cannot be cast to com .cxytiandi .kittycloud .user .api .request .Address 第二步:排查报错的代码 公司代码不方便透露,下面都是模拟的代码: public ResponseData<String> login

springboot application.yml配置学习

一曲冷凌霜 提交于 2020-08-09 17:28:44
一、背景 为了更好的使用springboot,所以看一下application.yml配置这块。主要是看数据绑定这块。 主要参考:https://www.hangge.com/blog/cache/detail_2459.html 二、项目主要内容 1、controller package com.shuimutong.learn.springboot.yml.controller; import com.alibaba.fastjson.JSON; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @RestController public class HelloController { @GetMapping( "/hello2" ) public String hello2() { return "Hello, Jack!" ; } } 2、启动类 package com.shuimutong

Java 代码性能优化之路

五迷三道 提交于 2020-08-09 05:46:57
一、前言 最近一直忙着参与公司的新项目开发,由于临期上线,正在对系统进行性能压测,在这个过程中,发现一些代码有性能优化的空间。因此决定写一篇文章,把本次以及今后,遇到的性能优化的 case 都记录下来,希望对大家们的编码水平能够有所帮助。 源码链接:https://github.com/jitwxs/blog-sample/blob/master/Java/performance_optimized 二、Java 基础 2.1 字符串拼接 在我们的系统中,存在着大量的缓存,这些缓存的 key 值根据请求参数的不同而拼接起来,如下代码所示: public class LastPriceCache { private String keySuffix = "last_price_%s" ; public double getLastPrice ( int id ) { return redisService . get ( this . generatorKey ( id ) ) ; } private String generatorKey ( int id ) { return String . format ( keySuffix , id ) ; } } 字符串拼接存在性能损耗,如果 id 值是可预期的,完全可以将其在内存中缓存起来,如下代码所示: public class

FreeMarker快速入门详解(一)

自古美人都是妖i 提交于 2020-08-08 12:18:34
​​​​​​一. freemarker 概述 模板引擎 只是根据模板的内容,将数据模型在模板中显示并输出文件(通常为html,也可以生成其它格式的文本文件) 数据模型:数据模型在java中可以是基本类型也可以List、Map、Pojo等复杂类型 模板 输出 常见的模板引擎 常用的java模板引擎哪些? 模板名称 描述 扩展名 jsp JavaEE规范中一个技术,在html代码中可以嵌入Java代码。开发中老项目还使用,新项目使用比较少。 *.jsp Freemarker 模板技术 *.ftl Thymeleaf 模板技术 *.th Velocity 模板技术 *. vm 二.环境搭建 此篇环境搭建父项目同MongoDB篇刚开始搭建的父类项目是同样流程, 可直接参考我前面博客 https://my.oschina.net/ithuang/blog/4315825 FreeMarker: 步骤一:父项目搭建好后, 创建子模块 步骤二: 然后直接点下一步 步骤三:最后输入项目名即可 步骤四: 添加Pom.xml坐标 < dependencies > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-freemarker </

SpringMVC 常见面试题汇总

a 夏天 提交于 2020-08-06 23:28:49
最近疯狂迷恋Spring家族的各类知识,以及一些原理问题,包括SpringBoot,SpringCloud,但是由于自己目前接触传统MVC项目略微老旧,所以就研究SpringMVC的相关问题 本篇也是我项目中遇到的纪录! 1、讲一下MVC MVC设计模式: Model-View-Controller简写。 MVC是软件工程中的一种软件架构模式, 它是一种分离业务逻辑与显示界面的设计方法。它把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。 控制器Controller:对请求进行处理,负责选择视图; 视图View:用户与程序交互的界面; 模型Model:用于业务处理 2、springmvc的执行流程 SpringMVC是一个MVC框架,springmvc的工作流程: 发送请求:在浏览器输入请求路径,发送请求,前端控制器连接所有的请求。 获得处理器:核心控制器(DispatcherServlet)接收到请求,通过处理器映射器(handlerMapping)获得对应的处理器(Handler) 大白话:根据请求路径获得对应的controller。 执行处理器:通过处理器适配器(HandlerAdapter)执行处理器(Handler),并返回视图模型对象(ModelAndView) 大白话:执行controller方法。如果方法返回的字符串