零基础泛微二开指南

news2024/9/28 9:22:01

前言

在泛微系统上开发一个自定义post接口

准备

首先准备工作要做好,安装一个泛微,之后所有的操作要在泛微的安装目录操作
参考官网安装,挺麻烦的;

IDEA

1、直接新建项目

new ->Project from Existing Sources.

直接打开泛微安装路径
在这里插入图片描述

2、总目录新建src目录

新的代码都开发在这个目录下
在这里插入图片描述

3、设置项目结构

·
在这里插入图片描述
使用泛微安装使用的自带JDK,没有用自己的也行,保持同环境作用

在这里插入图片描述

在这里插入图片描述

4、修改打包输出路径

修改目录D:\soft\fanwei\ecology\classbean 为自己打包编译路径
在这里插入图片描述
在源代码中可以看到此目录变为黄色
在这里插入图片描述

5、修改源代码目录

目录右键设置src为源目录,为蓝色
在这里插入图片描述

6、设置依赖

在这里插入图片描述

D:\soft\fanwei\ecology\WEB-INF\lib

classbean这个依赖可以没有,先引入这两个依赖,都是java类型,相当于jar
在这里插入图片描述

2、开发

1、目录

开发目录与正常spring一样,只不过controller叫了action,不叫也不影响使用

com.api.action 定义接口总路径
com.engine.action 则为实现路径 嫌麻烦一个类写完也可以,没啥固定要求

在这里插入图片描述

2、代码实例

如现有需求:做一个请求转发接口,带basic auth 认证的接口
UserInfoAction

 package com.api.action;

import javax.ws.rs.Path;

@Path("/userInfo")
public class UserInfoAction extends com.engine.action.UserInfoAction {
}

UserInfoAction
@Slf4j,IDEA需要支持插件,否则会打包失败

 package com.engine.action;

import com.engine.action.utils.PostMethodUtils;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import lombok.extern.slf4j.Slf4j;
import net.sf.json.JSONObject;

import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.io.UnsupportedEncodingException;
import java.util.Base64;

@Slf4j
public class UserInfoAction {
    /**
     * 人员信息获取接口
     * @param jsonObject
     * @return
     */
    @Path("/getSalaryByInfo")
    @POST
    @Produces(MediaType.APPLICATION_JSON)
    public Object getSalaryByInfo(@RequestBody JSONObject jsonObject){

        //获取发送URL
        String url = jsonObject.getString("url");
        String userName = jsonObject.getString("userName");
        String password = jsonObject.getString("password");
        if(url==""||url==null||userName==null||password==null){
            jsonObject.put("msg","发送参数有误,检查URL、userName、password");
            return jsonObject;
        }
        //移除参数
        jsonObject.remove("url");
        jsonObject.remove("userName");
        jsonObject.remove("password");
        log.info("发送参数:"+jsonObject);
        //发送
        PostMethodUtils postMethodUtils = new PostMethodUtils();
        String post = postMethodUtils.sendPost(url, jsonObject.toString(), userName, password);
        if(post==null){
            jsonObject.put("msg","返回信息为空");
            return jsonObject;
        }
        //格式化
        JSONObject returnMsg = JSONObject.fromObject(post);
        //获取解密 对应四个接口 只有O_RESULT解密
        Object o_result = returnMsg.get("O_RESULT");
        if(o_result!=null){
            byte[]  encodedString = Base64.getDecoder().decode(o_result.toString().getBytes());
            try {
                //解码后指定编码
                returnMsg.put("O_RESULT", new String(encodedString,"UTF-8"));
            } catch (UnsupportedEncodingException e) {
                log.info("报错信息:"+e.getMessage());
                throw new RuntimeException(e);
            }
        }
        log.info("返回参数:"+returnMsg);
        return returnMsg;
    }
    @Path("/getSalaryByInfo2")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Object getSalaryByInfo2(){
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("url","https://baidu.com");
        jsonObject.put("I_PAYTY","1");
        jsonObject.put("I_ABKRS","L1");
        jsonObject.put("I_INPER","202406");
        jsonObject.put("I_ZHRXZLX","10");
        jsonObject.put("I_ZBPMNO","OA00000000000001");
        jsonObject.put("userName","ifuser");
        jsonObject.put("password","123456");
        //获取发送URL
        String url = jsonObject.getString("url");
        String userName = jsonObject.getString("userName");
        String password = jsonObject.getString("password");
        if(url==""||url==null||userName==null||password==null){
            jsonObject.put("msg","发送参数有误,检查URL、userName、password");
            return jsonObject;
        }
        //移除参数
        jsonObject.remove("url");
        jsonObject.remove("userName");
        jsonObject.remove("password");
//        baseBean.writeLog("发送参数:"+jsonObject);
        log.info("发送参数:"+jsonObject);
        //发送
        PostMethodUtils postMethodUtils = new PostMethodUtils();
        String post = postMethodUtils.sendPost(url, jsonObject.toString(), userName, password);
        if(post==null){
            jsonObject.put("msg","返回信息为空");
            return jsonObject;
        }
        //格式化
        JSONObject returnMsg = JSONObject.fromObject(post);
        //获取解密
        //获取解密 对应四个接口 只有O_RESULT解密
        Object o_result = returnMsg.get("O_RESULT");
        if(o_result!=null){
            byte[]  encodedString = Base64.getDecoder().decode(o_result.toString().getBytes());
            try {
                //解码后指定编码
                returnMsg.put("O_RESULT", new String(encodedString,"UTF-8"));
            } catch (UnsupportedEncodingException e) {
                log.info("报错信息:"+e.getMessage());
                throw new RuntimeException(e);
            }
        }
        log.info("返回参数:"+returnMsg);
        return returnMsg;
    }
}

PostMethodUtils

 package com.engine.action.utils;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.Base64;
@Slf4j
public class PostMethodUtils {
 
    /**
     * 发送HttpClient请求
     * @param requestUrl
     * @param params
     * @return
     */
    public static String sendPost(String requestUrl, String params,String userName,String password ) {
        InputStream inputStream = null;
        try {
            HttpClient httpClient = new HttpClient();
            PostMethod postMethod = new PostMethod(requestUrl);
            // 设置请求头  Content-Type
            postMethod.setRequestHeader("Content-Type", "application/json");
            //Base64加密方式认证方式下的basic auth HAIN460000:用户名    topicis123:密码
            postMethod.setRequestHeader("Authorization", "Basic " + Base64.getUrlEncoder().encodeToString((userName + ":" + password).getBytes()));
            RequestEntity requestEntity = new StringRequestEntity(params,"application/json","UTF-8");
            postMethod.setRequestEntity(requestEntity);
            log.info("发送参数2:"+requestEntity);
            httpClient.executeMethod(postMethod);// 执行请求
            inputStream =  postMethod.getResponseBodyAsStream();// 获取返回的流
            BufferedReader br = null;
            StringBuffer buffer = new StringBuffer();
            // 将返回的输入流转换成字符串
            br = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
            String temp;
            while ((temp = br.readLine()) != null) {
                buffer.append(temp);
            }
            return buffer.toString();
        } catch (Exception e){
            log.info("报错信息:"+e.getMessage());
            throw new RuntimeException(e.getMessage());
        } finally {
            if(inputStream != null) {
                try{
                    inputStream.close();
                } catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

3、打包

直接项目右键打包编译

在这里插入图片描述
此时自定义输出目录就会有结果,这个目录泛微启动会加载二开内容
在这里插入图片描述

3、重启服务

重启服务、启动服务Resin9即可,看电脑配置,可能要十分钟,启动好了泛微会自动刷新登录页面

在这里插入图片描述

4、测试

因为我开发了一个GET一个post请求,涉及泛微认证,所以最简便做法是登录后,直接地址栏请求
注意路径要加api

localhost/api/userInfo/getSalaryByInfo2

在这里插入图片描述
测试成功,其他的功能大家可以试试
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2089078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp微信小程序page-container导致滚动失效/向下偏移,返回上一页/左滑取消返回上一页

项目场景: 提示:这里简述项目相关背景: 前提: 使用uniapp来做的微信小程序 有两级tab页面 要求手机的两边往中间滑时 要求(调用手机的物理返回按钮--有震动感) 返回上一页。具体如下图箭头所示&#xf…

数据防泄漏软件10款超好用推荐|2024数据防泄漏软件排名

在2024年,数据防泄漏软件市场涌现了多款优秀的产品,它们通过不同的技术手段和策略,为企业提供全面的数据安全保护。以下是10款超好用的数据防泄漏软件推荐及简要排名。 1.安企神 特点:专为企业设计的数据安全防护工具&#xff0c…

【零知识证明】MiMC哈希函数电路

1 哈希电路 哈希函数电路实现: pragma circom 2.0.0;// y (x k c) ^ 5 // 输入信号x, k ,常量c // base x k c // base2 base * base // base4 base2 * base2 // base5 base *base4 // 输出 ytemplate MIMC5(){signal input x;signal input k…

使用Aqua进行WebUI测试(Pytest)——介绍篇

一、在创建时选择Selenium with Pytest 如果选择的是Selenium,则只能选择Java类语言 选择selenium with Pytest,则可以选择Python类语言 Environment 其中的【Environment】可选New 和 Existing New :选择这个选项意味着你希望工具为你创…

【Go函数详解】二、参数传递、变长参数与多返回值

文章目录 一、传递参数1. 按值传参2. 引用传参2.1 特殊情况2.1.1 切片slice2.1.2 字典map 二、变长参数1. 基本定义和传值1.1 基本定义1.2 传值1.2.1 普通传值1.2.2 传递切片 2. 任意类型的变长参数(泛型) 三、多返回值1. 命名返回值 一、传递参数 1. 按…

破解电商数据分析难题,优化运营策略的秘诀

在电商行业中,数据分析是不可或缺的一部分。它能帮助商家精准掌握市场动态,优化运营策略,从而提升销售业绩。然而,面对大量复杂的数据,许多电商运营者往往不知道从哪里开始分析。那么,电商运营究竟如何有效…

优可测白光干涉仪助力红外探测行业发展——晶圆衬底检测

从18世纪红外线被发现,到19世纪红外探测器的发明。至今,随着工艺更新迭代,红外探测器朝着多波段、大面阵、高分辨率、低成本量产快速发展。 今天,小优博士带您探索红外探测的奥秘。 一、红外线是什么 红外光是一种电磁波&#x…

【 OpenHarmony 系统应用源码解析 】-- Launcher 初体验

前言 最近因为业务需要,需要做一款 UI 定制的鸿蒙 Launcher,于是就开始了「找到代码」、「研究代码」、「魔改代码」的套路流程,仅以此文章作为知识备份和技术探讨所用,也希望能给其他小伙伴提供一些源码的解析思路,方…

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——8.stackqueuepriority_queue(模拟实现)

1.stack 可通过模板使用其他类来建立stack&#xff08;如vector&#xff0c;list&#xff09; #include<vector>namespace zone {template<class T,class container> //两个模板参数class stack{public:void push(const T& x){it.push_back(x); //使用it的p…

【Linux】命令简介------迅速掌握Linux命令

目录 Linux 命令 &#x1f354; ls命令 &#x1f354; cd 和 pwd命令 &#x1f354; 相对路径和绝对路径 &#x1f354; 文件/文件夹的创建以及文件内容的浏览 &#x1f354; 文件的复制,移动和删除 &#x1f354; 文件的查找 &#x1f354; grep 和管道 &#x1f354…

Windows11安装SqlLite、Navicat Premium 15连接SqlLite、Springboot集成SqlLite

一、Windows11安装SqlLite 1、下载安装包 地址&#xff1a;SQLite Download Page 2、压缩包解压 3、配置系统环境变量 4、验证安装是否成功 打开命令提示符&#xff0c;输入 sqlite3 5、创建数据库文件 新建文件重命名为你想要的数据库名称&#xff0c;文件后缀改为.db 二、…

【微信小程序】如何触发按钮事件,例如调起微信客服

需求 实现一个如下图的效果, 点击客服按钮, 调起微信客服功能, 需要和button组合使用 效果图 实现思路 客服只能通过button按钮调起, 所以我们需要写一个button按钮, open-type“contact”, 然后把它隐藏起来。给客服图标加一个label, 设置for“btnId”, 这样点击图片就会触…

微服务即时通讯系统环境搭建(客户端)

微服务即时通讯系统环境搭建(客户端) 前言 今天开始&#xff0c;我们要开一个新坑&#xff0c;我们将它称作微服务即时通讯系统。说到即时通讯系统&#xff0c;大家肯定能想到如同“微信”这样的app。那么没错&#xff0c;这次这个项目就会像微信一样&#xff0c;当然功能肯定…

Linux(CentOS8)系统安装mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz

一、下载获取 mysql安装包&#xff1b; MySQL :: Download MySQL Community Server (Archived Versions) 二、安装步骤 1、切换到安装目录下&#xff0c;并解压 tar -zxvf mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz 2.移动解压后的文件并且重命名为mysql mv mysql-8.0.26…

Mybatis:基础巩固-DCL

目录 一、概述二、用户管理2.1 查询用户2.2 创建用户2.3 修改用户密码2.4 删除用户 三、权限控制3.1 查询权限3.2 赋予权限3.3 撤销权限 一、概述 DCL数据控制语言&#xff0c;用来管理数据库用户、控制数据库的访问和权限。简单来说就是可以让哪些用户可以访问哪些数据库。 二…

LiveQing视频点播流媒体RTMP推流服务功能-支持OBS推流摄像机RTMP推流支持无人机RTMP推流解决大疆无人机推流花屏问题完美解决大疆无人机花屏

LiveQing-支持OBS推流摄像机RTMP推流支持无人机RTMP推流解决大疆无人机推流花屏问题完美解决大疆无人机花屏 1、流媒体服务搭建2、推流工具准备3、创建鉴权直播间4、获取推流地址5、配置OBS推流6、推流及播放7、获取播放地址7.1 页面查看视频源地址7.2 接口查询 8、更多问题8.1…

黑屏环境下,如何利用OBD部署OceanBase企业版集群

一、前言 OBD&#xff0c;作为OceanBase官方推出的部署工具&#xff0c;显著简化了OB单机及集群的部署流程。此前&#xff0c;OBD能够支持对社区版OB进行一键部署&#xff0c;那OBD是否同样支持OB企业版的部署呢&#xff1f; 本文为大家介绍通过OBD&#xff0c;在OB企业版集群…

短视频矩阵系统怎么开发搭建使用?解决内容创作分发效率问题的工具系统

目录 前言 &#xff1a; 一、短视频矩阵系统开发目的 系统主要功能 二、怎么开发 前言 &#xff1a; 短视频矩阵系统是一种综合性的短视频营销工具&#xff0c;它集成了短视频创作、管理、分发、数据分析等多种功能于一体。 一、短视频矩阵系统开发目的 在帮助创作者和企…

C++中类的相关学习

动态内存分配和回收&#xff08;堆区&#xff09; C语言中动态内存分配和回收使用malloc函数和free函数完成的 C依旧可以使用上述的两个函数完成&#xff0c;动态内存分配和回收 C也可以使用两个关键字new和delete来完成动态内存的分配和回收 内存分配 单个申请 格式&…

Chapter 07 watch侦听器

欢迎大家订阅【Vue2Vue3】入门到实践 专栏&#xff0c;开启你的 Vue 学习之旅&#xff01; 文章目录 前言一、基本用法二、深度侦听 前言 在 Vue 中&#xff0c;watch 侦听器是一个非常实用的工具&#xff0c;用于处理自定义数据的变化。本文详细讲解了 watch 侦听器的基本用法…