Jodd = tools + ioc + mvc + db + aop + tx + json + html < 1.7 Mb

1.简介

Jodd是对于Java开发更便捷的开源迷你框架,包含工具类、实用功能的集合,总包体积不到1.7M,堪称是Java的"瑞士军刀"。
官网:https://jodd.org/jodd的gitHub: https://github.com/oblac


2.Jodd提供的功能

  1. 2.1)提供操作Java bean,
  2. 2.2)可以从各种数据源加载 Bean,
  3. 2.3)简化 JDBC操作,
  4. 2.4)剖析 SQL 查询,
  5. 2.5)处理时间与日期,
  6. 2.6)操作格式化 String,
  7. 2.7)搜索本地硬盘上的文件,
  8. 2.8)帮助处理 Servlet 请求等。
  9. 2.9)包含一个很小但实用的基于JSP的MVC框架。


3.Jodd组成

3.1Jodd工具包

        

高性能的工具集合

  • 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 */@Slf4jpublic class HttpRequestExtend extends HttpRequest {

public HttpRequestExtend() { super(); }
public static HttpRequestExtend post(String destination) { return (HttpRequestExtend) (new HttpRequestExtend()).method(HttpMethod.POST).set(destination); }
@Override 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 */@Component@Slf4jpublic 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接口的调用了。

请使用浏览器的分享功能分享到微信等