1.简介
官网:https://jodd.org/jodd的gitHub: https://github.com/oblac

2.Jodd提供的功能
2.1)提供操作Java bean, 2.2)可以从各种数据源加载 Bean, 2.3)简化 JDBC操作, 2.4)剖析 SQL 查询, 2.5)处理时间与日期, 2.6)操作格式化 String, 2.7)搜索本地硬盘上的文件, 2.8)帮助处理 Servlet 请求等。 2.9)包含一个很小但实用的基于JSP的MVC框架。
3.Jodd组成
高性能的工具集合
TypeConverter 一个强大的类型转换工具
BeanUtil 高效的 Bean 工具,支持嵌套的属性,以及标准的集合类
Base64/Base32
JDateTime 增强的时间类
IO 快速高性能的各种 Buffer、Writer、OutputStream
Wildcard 通配符工具
Servlet Servlet 工具,JSP 的标签、函数扩展
FindFile/ClassFinder 强大的文件/类搜索工具,支持通配符&正则表达式匹配
Cache 简单易用的 LRU、LRU、FIFO 缓存
StringUtil 强大的字符串处理工具
3.2Madvoc
轻量级快速开发MVC框架
自动扫描 Actions & Results
参数自动注入,支持嵌套的属性注入,支持标准集合参数的注入
自动导出需要输出的参数
支持通配符/正则表达式路由地址
支持 REST 风格的 URL
支持通过配置文件设置 Action 的拦截器
开放的 API,可轻松扩展
3.3HTTP
轻量级Http客户端
基于socket
支持 cookies
支持上传文件
支持自定义 HTTP 头
支持 gzip
支持 Basic authentication
3.4Props
增强的properties
支持 UTF-8 编码
支持插值操作
支持 ini 类型的区段
支持使用 += 附加值
支持多行模式
3.5Email
易用的 Email 接收发送工具,基于 javax.mail
支持 SSL
支持添加附件
支持 POP3、IMAP
IMAP 接受模式支持定义过滤器
支持解析 EML 文件
3.6Petite
轻量级 IoC 容器
3.7Db & DbOom
轻量级 ORM 框架
3.8Lagarto
高性能的 xml/html 解析框架
3.9Jerry
HTML 解析框架,Java 中的 jQuery,基于 Lagarto
3.4.0VTor
基于注解的字段验证框架
可设置多配置
易扩展
3.4.1Proxetta
高性能的代理生成器
4.结构
4.1工具类模块:
jodd-core 一些工具类,包括 Printf、JDateTime、StringUtil、Fast buffers 等等jodd-bean BeanUtil以及类型检查转换工具jodd-props 更强大的Java Properties替代jodd-email 更简单易用的e-mail收发jodd-upload 处理HTTP上传jodd-servlets 一些Servlet相关的工具类, 附带一套漂亮的JSP标签库jodd-http 轻巧的HTTP客户端
4.2框架模块:
jodd-madvoc 一个轻量级MVC框架jodd-petite 一个依赖注入容器jodd-lagarto HTML/XML解析器,包含Jerry和CSSelly ,让你像jQuery一样筛选HTML节点jodd-lagarto-web Lagarto的Web扩展,包含Decora、HtmlStapler等等jodd-proxetta 帮你实现动态代理,获取函数参数名jodd-dboom 数据库访问的轻量级封装,可看作一个简单的ORMjodd-json JSON序列化、反序列化jodd-vtor 一个基于注解的字段验证框架
5.使用jodd-http的一个bug
http调用的方式有很多种,比如Apache HttpCient工具包,OkHttps,RestTemplate,但是本文是Jodd的主场,以上方式就不在赘述。
5.1依赖
<dependency><groupId>org.joddgroupId><artifactId>jodd-httpartifactId><version>5.0.2version>dependency>
5.2jodd-http不支持“中文”的bug
"老外写的东西真是狗,连中文都不支持,还是国产的开源工具好用,就比如说Hutool",由于之前我对jodd有所了解,所以一次在项目中使用jodd-http模块跟同事对http的接口,项目对接调试中就遇到发送POST居然中文乱码了,然后有花了我一早上的时间去看了下它的源码,结果没我完美的解决了。
解决方案如下:
新增HttpRequestExtend类继承HttpRequest:
package xxxxx(包名放在自己的工程路径下);import jodd.http.HttpRequest;import jodd.net.HttpMethod;import lombok.extern.slf4j.Slf4j;import java.io.UnsupportedEncodingException;import java.util.Base64;/*** @author zlf* @description:* @time: 2021/12/17 10:31*/4jpublic class HttpRequestExtend extends HttpRequest {public HttpRequestExtend() {super();}public static HttpRequestExtend post(String destination) {return (HttpRequestExtend) (new HttpRequestExtend()).method(HttpMethod.POST).set(destination);}public HttpRequest body(byte[] content, String contentType) {Base64.Encoder encoder = Base64.getEncoder();String body = null;try {body = new String(content, "UTF-8");} catch (UnsupportedEncodingException var5) {log.error("转码异常!");}//String encodedText = encoder.encodeToString(body.getBytes());//log.info("base64编码数据为:{}",encodedText);this.contentType(contentType);return this.body(body);}/*** 请求参数base64编码* @param paramStr* @return*/public String base64EncoderParamStr(String paramStr) {Base64.Encoder encoder = Base64.getEncoder();String encodedText = null;try {paramStr = new String(paramStr.getBytes(), "UTF-8");} catch (UnsupportedEncodingException var5) {log.error("转码异常!");}encodedText = encoder.encodeToString(paramStr.getBytes());log.info("base64编码数据为:{}",encodedText);return encodedText;}}
JoddHttpUtil类
package xxxxx(包名放在自己的工程路径下);import com.alibaba.fastjson.JSON;import jodd.http.HttpRequest;import jodd.http.HttpResponse;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Component;import java.io.UnsupportedEncodingException;import java.util.Map;/*** @author zlf* @version 1.0* @date 2021/12/15 13:44*/public class JoddHttpUtil {/*** 发送Get请求** @param url : 请求的连接* @param params :请求参数,无参时传null* @return*/public static String sendGet(String url, Map<String, String> params) {HttpRequest request = HttpRequest.get(url);if (params != null) {request.query(params);}HttpResponse response = request.send();String respJson = response.bodyText();return respJson;}/*** 发送Post请求-json数据** @param url : 请求的连接* @param params :请求参数,无参时传null* @return*/public static String sendPostToJson(String url, Map<String, Object> params) {HttpRequest request = HttpRequest.post(url);request.contentType("application/json");request.charset("utf-8");//参数详情if (params != null) {request.body(JSON.toJSONString(params));}HttpResponse response = request.send();String respJson = response.bodyText();return respJson;}/*** 发送Post请求** @param url : 请求的连接* @param params :请求参数,无参时传null* @return*/public static String sendPost(String url, Map<String, Object> params) {HttpRequest request = HttpRequest.post(url);//参数详情if (params != null) {request.form(params);}HttpResponse response = request.send();String respJson = response.bodyText();return respJson;}/*** 发送Delete请求** @param url : 请求的连接* @param params :请求参数,无参时传null* @return*/public static String sendDelete(String url, Map<String, Object> params) {HttpRequest request = HttpRequest.delete(url);if (params != null) {request.form(params);}HttpResponse response = request.send();String respJson = response.bodyText();return respJson;}/*** 发送Post请求-json数据** @param url : 请求的连接* @param body :请求参数,无参时传null* @return*/public String sendPostBodyToJson(String url, String body) {log.info("url参数:{},请求体:{}", url, body);HttpRequestExtend request = HttpRequestExtend.post(url);request.contentType("application/json");request.charset("UTF-8");//参数详情if (body != null) {//bodyText以请求头的的编码方式设置编码,而body的方法的编码使用的是ISO8859-1的编码格式,所以有中文会乱码(重写body方法)request.body(body.getBytes(), "application/json");}HttpResponse response = request.send();String respJson = response.bodyText();log.info("同步响应结果:{}", respJson);return respJson;}/*** 发送Post请求-json数据** @param url : 请求的连接* @param paramStr :请求参数,无参时传null* @return*/public String sendPostQueryParamsOfBase64Str(String url, String paramStr) {log.info("url参数:{},请参数:{}", url, paramStr);HttpRequestExtend request = HttpRequestExtend.post(url);//request.contentType("application/json");request.charset("UTF-8");request.query("base64Str", request.base64EncoderParamStr(paramStr));HttpResponse response = request.send();String respJson = response.bodyText();String result = null;try {result = new String(respJson.getBytes(), "UTF-8");} catch (UnsupportedEncodingException var5) {log.error("解码异常!");}//之前跟同事对的时候请求中文乱码问题解决了,好像这个响应的中文乱码还在,有兴趣的小伙伴可以去看下这个问题哈log.info("同步响应结果:{}", result);return result;}}
上面的这个JoddHttpUtil工具类也可以拓展发送POST请求传JSON/XML的个是的参数,这个就看自己的项目需求了,然后使用上面的工具类就可在在你项目中进行http接口的调用了。