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提供的功能

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组成

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 数据库访问的轻量级封装,可看作一个简单的ORM
jodd-json JSON序列化、反序列化
jodd-vtor 一个基于注解的字段验证框架

5.使用jodd-http的一个bug 

        http调用的方式有很多种,比如Apache HttpCient工具包,OkHttps,RestTemplate,但是本文是Jodd的主场,以上方式就不在赘述。

5.1依赖

<dependency>
     <groupId>org.jodd</groupId>
    <artifactId>jodd-http</artifactId>
    <version>5.0.2</version>
 </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
 */
@Slf4j
public 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
@Slf4j
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接口的调用了。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值