当前位置: 代码迷 >> 综合 >> JSON转换+HTTPServletResponse+文件大小计算+Specifications动态查询+Stream+lambda+IDEA断点调试7/20-7/31
  详细解决方案

JSON转换+HTTPServletResponse+文件大小计算+Specifications动态查询+Stream+lambda+IDEA断点调试7/20-7/31

热度:60   发布时间:2023-11-07 14:55:43.0

一、FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换

主要用到:
1,对于JSON对象与JSON格式字符串的转换可以直接用 toJSONString()这个方法。
2,javaBean与JSON格式字符串之间的转换要用到:JSON.toJSONString(obj);
3,javaBean与json对象间的转换使用:JSON.toJSON(obj),然后使用强制类型转换,JSONObject或者JSONArray。
参考:https://blog.csdn.net/a18827547638/article/details/80777366

另:String JSONObject JSONArray List<实体类>转换
(格式得正确)
1、String转JSONObject

JSONObject jSONObject = JSONObject.parseObject(String);

2、String转JSONArray

JSONArray jsonArray= JSONArray.parseArray(String);

参考:https://www.cnblogs.com/ljangle/p/11047111.html

二、HttpServletResponse

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。获取网页提交过来的数据,只需要找request对象就行了。要向网页输出数据,只需要找response对象。

我涉及的地方是文件下载:设计好格式之后,利用OutputStream或者PrinterWriter传输。最开始用的Printerwriter,调了各种都有乱码问题,后来换成OutputStream就ok了。

文件下载功能的实现思路:
1获取要下载的文件的绝对路径
2获取要下载的文件名
3设置content-disposition响应头控制浏览器以下载的形式打开文件
4获取要下载的文件输入流
5创建数据缓冲区
6通过response对象获取OutputStream流
7将FileInputStream流写入到buffer缓冲区
8使用OutputStream将缓冲区的数据输出到客户端浏览器

注意:
推荐使用OutputStream流,避免使用PrintWriter流,因为OutputStream流是字节流,可以处理任意类型的数据,而PrintWriter流是字符流,只能处理字符数据,如果用字符流处理字节数据,会导致数据丢失。

参考:https://www.jianshu.com/p/8bc6b82403c5
https://www.cnblogs.com/xdp-gacl/p/3789624.html

三、文件大小的计算问题

目前Java获取文件大小的方法有两种:

1、通过file的length()方法获取;
2、通过流式方法获取;
通过流式方法又有两种,分别是旧的java.io.*中FileInputStream的available()方法和新的java…nio.*中的FileChannel
我直接使用的是length(),xxx.getSize().length()/1024.0 为什么1024加(.0)呢?因为数据类型的问题。

参考:https://www.cnblogs.com/hellowhy/p/7238570.html

四、Specifications动态查询

我因为涉及到列表查询中,分页、多条件拼接、模糊匹配、排序等查询的问题。需要用到Specification动态查询。非常方便。
具体操作参考:https://www.jianshu.com/p/d9a99b95d094

五、Java8 Stream和lambda表达式

Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

特点:
1 . 不是数据结构,不会保存数据。
2. 不会修改原来的数据源,它会将操作后的数据保存到另外一个对象中。(保留意见:毕竟peek方法可以修改流中元素)
3. 惰性求值,流在中间处理过程中,只是对操作进行了记录,并不会立即执行,需要等到执行终止操作的时候才会进行实际的计算。

参考:https://blog.csdn.net/y_k_y/article/details/84633001
stream 的API:https://developer.ibm.com/zh/articles/j-lo-java8streamapi/

lambda表达式是JAVA8中提供的一种新的特性,它支持JAVA也能进行简单的“函数式编程”。
它是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。

参考:https://blog.csdn.net/XieYupeng520/article/details/47804481?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight

当然,lambda和stream都是常常一起使用。
参考:https://blog.csdn.net/jinzhencs/article/details/50748202?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight

六、IDEA debug断点调试技巧

断点经常会使用,看具体出问题的地方。我一般项目都是点debug启动,如果有问题,直接在实现类里面打断点。直接按step over(F8)进行调试,查看查到的数据对不对,或者封装的数据是否完整等。
具体操作设置参考:https://blog.csdn.net/minkeyto/article/details/81489041

  相关解决方案